Antiguo Wei gana la oferta que le llevará a conocer --- Título de la serie cepillo (sub-matriz 30. La máxima y continua)

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
Publicados 160 artículos originales · elogios ganado 30 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/yixieling4397/article/details/104967853
Recomendado
Clasificación