* Dado que no se especifica, supongo que la matriz consta solo de números positivos
Un enfoque de ventana deslizante debería funcionar. La idea es mantener un puntero izquierdo y un puntero derecho, ambos inicialmente en la posición 0, junto con una variable de “suma” para mantener la suma actual en el segmento [izquierda, derecha]. También mantenga otra variable para mantener la respuesta más óptima actualmente, nombremosla “ans”. Luego proceda de la siguiente manera:
- Si la suma del elemento entre izquierda y derecha es menor que S, incremente el puntero derecho. Aumentar suma con el valor en la matriz [derecha]
- Si la suma del elemento entre izquierda y derecha es exactamente S, actualice ans para que sea el rango actual. Si solo desea conocer el tamaño del segmento más grande, entonces ans = max (ans, derecha-izquierda + 1). Si desea conocer el segmento real, actualice la respuesta después de validar que el rango actual es más largo que su mejor rango actual
- Si la suma del elemento entre izquierda y derecha es mayor que S, siga incrementando el puntero izquierdo y disminuya la suma con el valor en la matriz [izquierda] hasta que sea menor que S.
La complejidad temporal es O (N) donde N es el número de elementos en la matriz.
- Cómo comenzar con la introducción a los algoritmos (CLRS)
- Descubrí el algoritmo de Dijkstra yo mismo. ¿Puedo decir que soy bueno en informática?
- ¿Cómo funcionan los algoritmos comerciales?
- ¿Alguien puede explicar el algoritmo de programación Round Robin?
- ¿Diferencia entre algoritmo de relleno de inundación y relleno de límite en gráficos de computadora?
Por supuesto, debe validar fuera de los límites, asegurándose de que la izquierda no exceda a la derecha, etc. Pero se lo dejaré a usted.