Einführung:
Inspiriert von diesen beiden SO-Fragen (ohne Zweifel aus derselben Klasse): Drucken Sie die Elemente in der Unteranordnung mit der maximalen Summe ohne benachbarte Elemente, Java, und der maximalen Summe nicht benachbarter Elemente einer Anordnung, die gedruckt werden sollen .
Herausforderung:
Bei einer Liste von Ganzzahlen wird eine Teilsequenz ausgegeben, die aus nicht benachbarten Elementen mit der höchsten Summe besteht. Hier einige Beispiele:
[1,2,3,-1,-3,2,5]
würde[1,3,5]
(mit einer Summe von9
) zu den 0-basierten Indizes führen[0,2,6]
.[4,5,4,3]
würde entweder[4,4]
(mit einer Summe von8
) bei den 0-basierten Indizes[0,2]
oder[5,3]
(auch mit einer Summe von8
) bei den 0-basierten Indizes ergeben[1,3]
.[5,5,10,100,10,5]
würde[5,100,5]
(mit einer Summe von110
) entweder zu den 0-basierten Indizes[0,3,5]
oder führen[1,3,5]
.
Was an diesen Beispielen oben am wichtigsten ist, sind die Indizes, die die Elemente enthalten, mindestens 2 voneinander entfernt. Wenn wir uns das Beispiel [5,5,10,100,10,5]
genauer ansehen, haben wir die folgende mögliche Folge, die nicht benachbarte Elemente enthält. mit ihren Indizes darunter; mit ihren Summen darunter:
[[5],[10],[100],[10],[5],[5],[100,5],[10,5],[10,10],[5,5],[5,10],[5,100],[5,5],[5,10],[5,100],[5,10],[5,100,5],[5,100,5],[5,10,5],[5,10,10]] // non-adjacent subsequences
[[5],[ 4],[ 3],[ 2],[1],[0],[ 3,5],[ 2,5],[ 2, 4],[1,5],[1, 4],[1, 3],[0,5],[0, 4],[0, 3],[0, 2],[1, 3,5],[0, 3,5],[0, 2,5],[0, 2, 4]] // at these 0-based indices
[ 5, 10, 100, 10, 5, 5, 105, 15, 20, 10, 15, 105, 10, 15, 105, 15, 110, 110, 20, 25] // with these sums
^ ^ // and these two maximums
Da die maximalen Summen sind 110
, geben wir [5,100,5]
als Ergebnis aus.
Herausforderungsregeln:
- Sie dürfen Schlüssel-Wert-Paare aus Index + Wert ausgeben. Stattdessen
[5,100,5]
können Sie also[[0,5],[3,100],[5,5]]
oder[[1,5],[3,100],[5,5]]
als Ergebnis ausgeben (oder[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
wenn 1-basierte Indexierung anstelle von 0-basierten verwendet wird).- Wenn Sie Schlüssel-Wert-Paare verwenden, können diese auch in umgekehrter oder zufälliger Reihenfolge vorliegen, da klar ist, welche Werte aufgrund des gepaarten Index gemeint sind.
- Die Ausgabe nur der Indizes ohne Werte ist nicht zulässig. Es sollte entweder die Werte oder die Werte / Indizes als Schlüssel-Wert-Paare ausgeben (oder zwei getrennte Listen für 'Schlüssel' und 'Werte' derselben Größe, wenn Schlüssel-Wert-Paare in der Sprache Ihrer Wahl nicht möglich sind).
- Sie dürfen statt nur einer alle möglichen Teilfolgen mit der maximalen Summe ausgeben.
- Wie Sie den Beispielen entnehmen können, kann die Eingabeliste auch negative und doppelte Werte enthalten. Sie können davon ausgehen, dass die Eingabe-Ganzzahlen im Bereich .
- Die Ausgabeliste darf nicht leer sein und muss immer mindestens ein Element enthalten (wenn eine Liste nur negative Werte enthalten würde, würde eine Liste mit dem niedrigsten negativen Wert als Ergebnis ausgegeben - siehe die letzten beiden Testfälle).
- Wenn es eine mögliche Ausgabe gibt, jedoch für mehrere verschiedene Indizes, ist es zulässig, beide auszugeben, obwohl sie möglicherweise doppelt aussehen. (dh das obige Beispiel kann
[[5,100,5],[5,100,5]]
für beide möglichen Indexkombinationen ausgegeben werden ).
Testfälle:
Input: Possible outputs: At 0-based indices: With sum:
[1,2,3,-1,-3,2,5] [1,3,5] [0,2,6] 9
[4,5,4,3] [4,4]/[5,3] [0,2]/[1,3] 8
[5,5,10,100,10,5] [5,100,5] [0,3,5]/[1,3,5] 110
[10] [10] [0] 10
[1,1,1] [1,1] [0,2] 2
[-3,7,4,-2,4] [7,4] [1,4] 11
[1,7,4,-2] [7] [1] 7
[1,2,-3,-4,5,6,-7] [2,6] [1,5] 8
[800,-31,0,0,421,726] [800,726]/[800,0,726] [0,5]/[0,3,5]/[0,2,5] 1526
[-1,7,8,-5,40,40] [8,40] [2,4]/[2,5] 48
[-5,-18,-3,-1,-10] [-1] [3] -1
[0,-3,-41,0,-99,-2,0] [0]/[0,0]/[0,0,0] [0]/[3]/[6]/[0,3]/
[0,6],[3,6]/[0,3,6] 0
powerset
ist eine Menge von Teilmengen, nicht wahr? aber es sieht so aus, als würden Sie eine Reihe von Teilsequenzen zurückgeben? [4,5,4,3] würde entweder [4,4] ergeben, wobei [4,4] eindeutig keine Menge ist.
[5,100,5]
zweimal für dein drittes Beispiel.