¿Alguien puede proporcionar un buen algoritmo para resolver esto con una complejidad lineal de tiempo?

Tiene dos variables, current_sum y max_sum . Max_sum almacena la suma máxima en cualquier instante de tiempo.

Inicialmente, deje que current_sum y max_sum sean 0.

Considere un current_vector de elementos para realizar un seguimiento de qué números contribuyen a la current_sum . Considere un final_vector que se actualizará cada vez que se cambie el valor de max_sum . Este vector tiene que borrarse cada vez que inicializa current_sum para que sea 0. current_sum se inicializará a 0 cada vez que encuentre un número negativo.

Así que considere el ejemplo dado: 0,2,4, -1,8, -7,4,1.

1) Al principio, considere 0> = 0. Agréguelo a la suma_actual . Agregue 0 al current_vector .

2) Considere el siguiente número, 2> = 0. Agréguelo a la suma_actual . Agregue 2 al current_vector .

2) Pasemos al siguiente número 4> = 0. Agréguelo a la suma_actual . Agregue 4 al current_vector .

3) Ahora considere -1 <0. Compruebe si current_sum> max_sum . Si es así, make max_sum = current_sum y make final_vector = current_vector . Ahora final_vector tiene {0,2,4} y max_sum tiene 6. Haga current_sum como 0 , borre current_vector a tamaño 0 .

4) Considere 8> = 0. Agréguelo a la suma_actual . Agregue 8 al current_vector .

5) Siguiente número: -7 <0, Compruebe si current_sum> max_sum . Si es así, make max_sum = current_sum y make final_vector = current_vector . Ahora final_vector tiene {8} y max_sum tiene 8. clear current_vector y current_sum.

6) Siguiente número: 4> = 0. Agréguelo al valor de current_sum . Agregue 4 al current_vector .

7) Siguiente número: 1> = 0. Agréguelo a la suma_actual . Agregue 1 al current_vector .

Al final, después de atravesar todos los elementos, realice una última comprobación si current_sum> max_sum y actualice max_sum y final_vector en consecuencia.

Como puede ver, nuestra respuesta está en max_sum y final_vector .

Espero que esto ayude. 🙂