30. El máximo y subarray continuo
problema:
HZ ocasionalmente conseguir algunas cuestiones profesionales a parpadear los estudiantes de ciencias no informáticos. Después de que el grupo de prueba terminará hoy, él tomó la palabra: en el reconocimiento de patrones unidimensional de edad, a menudo es necesario para calcular el máximo y continuo sub-vectores cuando el vector es un número entero positivo, el problema resuelto. Sin embargo, si el vector contiene un número negativo, debe contener un número negativo, y esperar un número positivo al lado de él sería compensarlo? Por ejemplo: {6, -3, -2,7, -15,1,2,2}, y los máximos sucesivos sub-vectores de 8 (a partir de 0, hasta la tercera). Para una matriz y devuelve su subsecuencia máxima continua y no se deje engañar que viva? (Longitud Sub-vector es al menos 1)
solución:
Esta pregunta es el problema de programación dinámica clásica, el problema leetcode similares en stock.
Usando dinámica programación
F (i): en array [i] y el valor máximo del último elemento de la submatriz, la posición relativa de la constante de elemento subarreglo
F (i) = max (F (i-1) + array [ I], array [i])
RES: todas las sub-series y un valor máximo
res = max (res, F ( i))
La matriz de [6, -3, -2, 7, -15, 1, 2, 2]
Estado inicial:
F. (0) = 6
RES = 6
i = 1:
F. (1) = max (F. (0) - . 3, -3) = max (6-3,3) 3 =.
RES = max (F. (1.), RES) = max (3,6) = 6.
I = 2:
. F. (2) = max (F. (1 ) -2, -2) = max (3-2, -2) = 1.
RES = max (F. (2), RES) = max (1,6) = 6.
i = 3:.
F. (3) = max (. F. (2) +7,7) = max (+ 7,7 1) 8 =..
RES = max (F. (2), RES) = max (8,6) 8 =.
i = 4:.
F. (4) = max. (. F. (3) -15, -15) = max (8-15, -15) = -. 7
. res = max (. F. (4), res) = max (-7,8) = 8
y así
las res finales valor 8
código Python:
# -*- coding:utf-8 -*-
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
n=len(array)
maxnum=array[0]
result=array[0]
for i in range(1,n):
maxnum=max(maxnum+array[i],array[i])
result=max(maxnum,result)
return result