master > master: code - nextGreaterEl alg für python, vereinfachte Algorithmus für py + go
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user