Wprowadzenie:
Zainspirowany tymi dwoma pytaniami SO (bez wątpienia z tej samej klasy): wydrukuj elementy w podtablicy maksymalnej sumy bez sąsiadujących elementów java i Maksymalna suma nieprzylegających elementów tablicy, które zostaną wydrukowane .
Wyzwanie:
Biorąc pod uwagę listę liczb całkowitych, wypisz podsekwencję składającą się z nieprzylegających do siebie elementów o najwyższej sumie. Oto kilka przykładów:
[1,2,3,-1,-3,2,5]
spowoduje[1,3,5]
(z sumą9
) indeksy oparte na 0[0,2,6]
.[4,5,4,3]
spowoduje albo[4,4]
(z sumą8
) przy indeksach opartych na 0[0,2]
lub[5,3]
(również z sumą8
) przy indeksach opartych na 0[1,3]
.[5,5,10,100,10,5]
spowoduje[5,100,5]
(z sumą110
) indeksy oparte na 0[0,3,5]
lub[1,3,5]
.
Co najważniejsze w powyższych przykładach, indeksy zawierające elementy są co najmniej 2 od siebie. Jeśli przyjrzymy się dokładniej przykładowi [5,5,10,100,10,5]
: mamy następującą potencjalną podsekwencję zawierającą nieprzylegające elementy; z ich indeksami poniżej; z sumami poniżej:
[[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
Ponieważ maksymalne kwoty są 110
, wyprowadzamy [5,100,5]
jako wynik.
Zasady konkursu:
- Możesz wyprowadzać pary klucz-wartość indeksu + wartość. Zamiast tego
[5,100,5]
możesz wyprowadzać dane wyjściowe[[0,5],[3,100],[5,5]]
lub[[1,5],[3,100],[5,5]]
w wyniku (lub[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
gdy indeksowanie oparte na 1 zamiast 0).- Jeśli użyjesz par klucz-wartość, mogą one również występować w kolejności odwrotnej lub losowej, ponieważ jasne jest, które wartości mają na myśli ze względu na sparowany indeks.
- Wyprowadzanie tylko indeksów bez wartości jest niedozwolone. Powinien albo generować wartości, albo wartości / indeksy jako pary klucz-wartość (lub dwie oddzielne listy dla „kluczy” i „wartości” tego samego rozmiaru, jeśli pary klucz-wartość nie są możliwe w wybranym języku).
- Możesz wypisywać wszystkie możliwe podciągi z maksymalną sumą zamiast tylko jednej.
- Jak widać z przykładów, lista wejściowa może również zawierać wartości ujemne i zduplikowane. Możesz założyć, że liczby całkowite wejściowe są w zakresie .
- Lista wyjściowa nie może być pusta i zawsze musi zawierać co najmniej jeden element (jeśli lista zawiera tylko wartości ujemne, wówczas lista zawierająca jedną najniższą wartość ujemną byłaby wówczas wynikiem - patrz dwa ostatnie przypadki testowe).
- Jeśli istnieje jeden możliwy wynik, ale dla wielu różnych indeksów, dozwolone jest generowanie obu z nich, nawet jeśli mogą wyglądać na duplikaty. (tzn. powyższy przykład może wyprowadzać dane
[[5,100,5],[5,100,5]]
dla obu możliwych kombinacji indeksów).
Przypadki testowe:
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
jest zestawem podzbiorów, prawda? ale wygląda na to, że zwracasz zestaw podsekwencji? [4,5,4,3] spowoduje albo [4,4], gdzie [4,4] wyraźnie nie jest zbiorem.
[5,100,5]
dwa razy dla twojego trzeciego przykładu.