Duplicar posibles:
Find the maximum interval sum in a list of real numbers.suma más grande subarreglo contigua (Pregunta De la Entrevista)
me hizo la siguiente pregunta hoy en Adobe entrevista para el puesto de ingeniero de software.
Problema Dada una matriz arr[1..n]
de enteros. Escribe un algoritmo para encontrar la suma de submatriz contigua dentro de la matriz que tiene la suma más grande. Devuelve 0 si todos los números son negativos.
Ejemplo
Dada array arr[1..6] = [ 12, 14, 0, -4, 61, -39 ]
respuesta
83 construido con [ 12, 14, 0, -4, 61 ]
.
Podría encontrar una solución ejecutándose en O(n logn)
pero no creo que sea muy eficiente. El entrevistador me pidió que escribiera un algoritmo O(n)
. No podría venir con eso.
¿Alguna idea sobre cómo escribir una solución O(n)
para este problema? Algoritmo a implementar en C/C++/Java.
Gracias de antemano
Hay todo un capítulo sobre este problema en "perlas" - Programación de lectura recomendada. –
Es un problema muy simple. Atraviesa ambos extremos uno por uno. Y siga recortando la matriz desde cada extremo hasta que la suma desde el inicio hasta la posición actual o desde el final hasta la posición actual sea negativa. O (n) –