El tema es de LeetCode
Se puede acceder a otras soluciones o código fuente: tongji4m3
descripción
Dados los números de una matriz entera, busque una submatriz continua con la suma más grande (la submatriz contiene al menos un elemento) y devuelva la suma más grande.
Ejemplo:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
Avanzado:
Si ya ha implementado una solución con complejidad O (n), intente utilizar una solución más sutil de dividir y conquistar.
Ideas
Desplácese de izquierda a derecha, si es mayor que 0, manténgalo, de lo contrario no lo haga. el resultado se juzga en cada momento
detalle
Debido a que la submatriz contiene al menos un elemento, la inicialización no puede ser 0, pero el valor mínimo de int
Código
//子数组最少包含一个元素
public int maxSubArray(int[] nums)
{
int N = nums.length;
int result = Integer.MIN_VALUE,temp=0;//look,因为条件是至少包含
for (int i = 0; i < N; i++)
{
temp = temp > 0 ? temp + nums[i] : nums[i];
result = Math.max(result, temp);
}
return result;
}
Análisis de complejidad
complejidad del tiempo
O (N) O (N) O ( N )
Complejidad espacial
O (1) O (1) O ( 1 )