Introduzione:
Ispirato da queste due domande SO (senza dubbio della stessa classe): stampare gli elementi nel sottoarray della somma massima senza elementi adiacenti java e la somma massima degli elementi non adiacenti di un array, da stampare .
Sfida:
Dato un elenco di numeri interi, genera una sottosequenza composta da elementi non adiacenti che hanno la somma più alta. Ecco alcuni esempi:
[1,2,3,-1,-3,2,5]
comporterebbe[1,3,5]
(con una somma di9
) agli indici basati su 0[0,2,6]
.[4,5,4,3]
si tradurrebbe in[4,4]
(con una somma di8
) negli indici basati su 0[0,2]
o[5,3]
(anche con una somma di8
) negli indici basati su 0[1,3]
.[5,5,10,100,10,5]
comporterebbe[5,100,5]
(con una somma di110
) in entrambi gli indici basati su 0[0,3,5]
o[1,3,5]
.
La cosa più importante di questi esempi sopra, gli indici che contengono gli elementi sono almeno 2 l'uno dall'altro. Se guardiamo l'esempio [5,5,10,100,10,5]
più in profondità: abbiamo la seguente sottosequenza potenziale contenente elementi non adiacenti; con i loro indici sottostanti; con le loro somme sotto che:
[[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
Dal momento che le somme massime sono 110
, produciamo [5,100,5]
come risultato.
Regole della sfida:
- È consentito generare coppie chiave-valore dell'indice + valore. Quindi, invece di
[5,100,5]
te, puoi produrre[[0,5],[3,100],[5,5]]
o[[1,5],[3,100],[5,5]]
come risultato (o[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
quando viene usato l'indicizzazione in base 1 anziché in base a 0).- Se usi coppie chiave-valore, possono anche essere in ordine inverso o casuale, poiché è chiaro quali valori si intendono a causa dell'indice accoppiato.
- Non è consentito fornire solo gli indici senza valori. Dovrebbe produrre i valori o i valori / indici come coppie chiave-valore (o due elenchi separati per "chiavi" e "valori" della stessa dimensione se le coppie chiave-valore non sono possibili nella lingua scelta).
- Hai il permesso di produrre tutte le sottosequenze possibili con la somma massima invece di una sola.
- Come puoi vedere dagli esempi, l'elenco di input può contenere anche valori negativi e duplicati. Puoi supporre che gli interi di input siano compresi nell'intervallo .
- L'elenco di output non può essere vuoto e deve sempre contenere almeno un elemento (se un elenco contiene solo valori negativi, un elenco contenente il singolo valore negativo più basso verrà quindi emesso come risultato - vedere gli ultimi due casi di test).
- Se esiste un output possibile ma per più indici diversi, è consentito output entrambi anche se potrebbero sembrare duplicati. (vale a dire l'esempio sopra, può essere generato
[[5,100,5],[5,100,5]]
per entrambe le possibili combinazioni di indici).
Casi test:
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
è un insieme di sottoinsiemi vero? ma sembra che tu stia restituendo una serie di sottosequenze? [4,5,4,3] si tradurrebbe in [4,4] in cui [4,4] non è chiaramente un insieme.
[5,100,5]
due volte per il tuo terzo esempio.