Descripción del problema:
Introduzca una matriz de enteros. Hay números positivos y negativos en la matriz. Uno o más enteros consecutivos en la matriz forman una submatriz. Encuentre el valor máximo de la suma de todas las submatrices.
La complejidad de tiempo requerida es O (n).
Ejemplo 1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
análisis del problema:
Este problema se puede resolver mediante programación dinámica. El método de programación dinámica también se puede considerar como un método de llenado de tablas, y es necesario construir una tabla de programación dinámica. Aquí se construye una tabla y el valor del elemento en cada posición de la tabla indica el valor máximo cuando la posición actual es la última posición del subarreglo. El enfoque específico es:
- Inicialización: define la suma máxima de la submatriz de registros maxv variable, el valor inicial es el primer elemento de la lista list [0];
- Para recorrer la lista, si el valor del elemento anterior es negativo, entonces el valor del elemento actual permanece sin cambios; si es positivo, agregue el valor del elemento anterior como el valor del elemento actual;
- Compare el valor del elemento actual con maxv, y maxv toma el valor más grande
Tome la lista nums = [-2,1, -3,4, -1,2,1, -5,4] como ejemplo:
nums | -2 | 1 | -3 | 4 | -1 | 2 | 1 | -5 | 4 |
dp | -2 | 1 | -2 | 4 | 3 | 5 | 6 | 1 | 5 |
maxv | -2 | 1 | 1 | 4 | 4 | 5 | 6 | 6 | 6 |
Análisis de algoritmos:
El algoritmo solo necesita atravesar la matriz nums una vez, por lo que la complejidad del tiempo es O (n). Usando una cantidad constante de espacio extra, la complejidad del espacio es O (1).
Implementación de codificación:
class Solution:
def maxSubArray(self, lists: List[int]) -> int:
maxv = lists[0]
for i in range(1,len(lists)):
if lists[i-1]>0:
lists[i] += lists[i-1]
if lists[i] > maxv:
maxv = lists[i]
return maxv
No se pudo volver a cargar y cancelar