master > master: code - nextGreaterEl alg für python, vereinfachte Algorithmus für py + go

This commit is contained in:
RD
2021-11-06 18:22:17 +01:00
parent ef833533f6
commit 580cc97387
8 changed files with 187 additions and 31 deletions

View File

@@ -34,52 +34,45 @@ func NextGreaterElement(L []int) [][2]int {
S := stacks.CREATE()
for i := 0; i < len(L); i++ {
logging.Debug("Lies Element L[%v] ein", i)
logging.Debug("Nächstes List-Element L[%v] = %v betrachten", i, L[i])
nextElement := L[i]
logging.Debug("Entferne alle top Elemente vom Stack bis >= nextElement")
/*
Entferne alle top Elemente vom Stack < nextElement
bis oben ein Elment >= nextElement ist, oder Stack leer ist.
*/
logging.Debug("Stack S | %v", S)
if !S.EMPTY() {
logging.Debug("Entferne alle top Elemente vom Stack bis >= nextElement")
for !S.EMPTY() {
element := S.TOP()
S.POP()
metrics.AddTimeCost()
/*
Entferne kleinere Elemente vom Stack
Aktuelles Element ist jeweils größerer rechter Partner
*/
for element < nextElement {
logging.Debug("Stack S | %v", S)
metrics.AddMovesCost()
logging.Debug("Stack S | %v; (popped) Top-Element = %v", S, element)
// falls element < next Element, zum Output hinzufügen
if element < nextElement {
addToOutput(element, nextElement)
if S.EMPTY() {
break
}
element = S.TOP()
S.POP()
metrics.AddTimeCost()
}
// lege letztes Element zurück
if element > nextElement {
logging.Debug("Element >= nextElement zurücklegen")
// sonst Element auf Stack zurücklegen und Schleife abbrechen.
} else {
logging.Debug("Stack-Element >= nextElement ==> zurücklegen")
S.PUSH(element)
metrics.AddTimeCost()
metrics.AddMovesCost()
break
}
logging.Debug("Stack S | %v", S)
}
S.PUSH(nextElement)
metrics.AddTimeCost()
logging.Debug("L[%v] auf Stack legen", i)
S.PUSH(nextElement)
logging.Debug("Stack S | %v", S)
metrics.AddMovesCost()
}
// was übrig bleibt hat kein größeres Element
logging.Debug("Alles übrige auf Stack hat kein nächstes größeres Element")
for !S.EMPTY() {
metrics.AddTimeCost()
logging.Debug("Stack S | %v", S)
element := S.TOP()
S.POP()
metrics.AddMovesCost()
addToOutput(element, -1)
}
logging.Debug("Stack S | %v", S)