Introducción:
Inspirado por estas dos preguntas SO (sin duda de la misma clase): imprima los elementos en la submatriz de suma máxima sin elementos adyacentes java y la suma máxima de elementos no adyacentes de una matriz, para imprimir .
Reto:
Dada una lista de enteros, genera una subsecuencia que consiste en elementos no adyacentes que tienen la suma más alta. Aquí algunos ejemplos:
[1,2,3,-1,-3,2,5]
daría como resultado[1,3,5]
(con una suma de9
) en los índices basados en 0[0,2,6]
.[4,5,4,3]
daría como resultado[4,4]
(con una suma de8
) en los índices basados en 0[0,2]
o[5,3]
(también con una suma de8
) en los índices basados en 0[1,3]
.[5,5,10,100,10,5]
daría como resultado[5,100,5]
(con una suma de110
) en los índices basados en 0[0,3,5]
o[1,3,5]
.
Lo que es más importante sobre estos ejemplos anteriores, los índices que contienen los elementos están al menos 2 separados entre sí. Si miramos el ejemplo [5,5,10,100,10,5]
más en profundidad: tenemos la siguiente subsecuencia potencial que contiene elementos no adyacentes; con sus índices debajo de él; con sus sumas debajo de eso:
[[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
Dado que las sumas máximas son 110
, generamos [5,100,5]
resultados
Reglas de desafío:
- Se le permite generar pares clave-valor del índice + valor. Entonces, en lugar de
[5,100,5]
usted, puede generar resultados[[0,5],[3,100],[5,5]]
o[[1,5],[3,100],[5,5]]
como resultado (o[[1,5],[4,100],[6,5]]
/[[2,5],[4,100],[6,5]]
cuando se utiliza la indexación basada en 1 en lugar de la basada en 0).- Si usa pares clave-valor, también pueden estar en orden inverso o aleatorio, ya que está claro qué valores se deben al índice emparejado.
- No se permite generar solo los índices sin valores. Debería generar los valores o los valores / índices como pares clave-valor (o dos listas separadas para 'claves' y 'valores' del mismo tamaño si los pares clave-valor no son posibles en el idioma que elija).
- Se le permite generar todas las subsecuencias posibles con la suma máxima en lugar de solo una.
- Como puede ver en los ejemplos, la lista de entrada también puede contener valores negativos y duplicados. Puede suponer que los enteros de entrada están dentro del rango .
- La lista de salida no puede estar vacía y siempre debe contener al menos un elemento (si una lista solo contendría valores negativos, una lista que contenga el único valor negativo más bajo se generaría como resultado; consulte los últimos dos casos de prueba).
- Si hay una salida posible pero para múltiples índices diferentes, se permite la salida de ambos aunque parezcan duplicados. (es decir, el ejemplo anterior, puede generar
[[5,100,5],[5,100,5]]
ambas combinaciones de índices posibles).
Casos de prueba:
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
es un conjunto de subconjuntos, ¿no? pero parece que estás devolviendo un conjunto de subsecuencias? [4,5,4,3] daría como resultado [4,4] donde [4,4] claramente no es un conjunto.
[5,100,5]
dos veces para su tercer ejemplo.