1. Título Descripción
Te da una gran variedad de números enteros. Puede elegir cualquier valor de inicio positivo como valor inicial.
Debe atravesar la matriz de números de izquierda a derecha y acumular los valores en la matriz de números a su vez.
Asegúrese de que la suma acumulativa sea siempre mayor o igual a 1 y elija un número positivo más pequeño como valor inicial.
输入:nums = [-3,2,-3,4,2]
输出:5
解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。
累加求和
startValue = 4 | startValue = 5 | nums
(4 -3 ) = 1 | (5 -3 ) = 2 | -3
(1 +2 ) = 3 | (2 +2 ) = 4 | 2
(3 -3 ) = 0 | (4 -3 ) = 1 | -3
(0 +4 ) = 4 | (1 +4 ) = 5 | 4
(4 +2 ) = 6 | (5 +2 ) = 7 | 2
Método 1: enumeración
public int minStartValue(int[] nums) {
int st = Integer.MAX_VALUE;
int t = -1;
for (int i = 1; i < Integer.MAX_VALUE; i++) {
st = i;
int sum = st;
boolean flag = true;
for (int j = 0; j < nums.length; j++) {
sum += nums[j];
if (sum < 1) {
flag = false;
break;
}
}
if (flag) {
return st;
}
}
return st;
}
Análisis de complejidad.
- Complejidad del tiempo: ,
- Complejidad espacial: ,
Método 2: Prefijo y
- Piénselo de esta manera: porque el objetivo es hacer que el prefijo más pequeño y el valor que aparecen en el proceso de acumulación sea mayor que 1,
- Por lo tanto, necesitamos registrar el valor mínimo del resultado obtenido después de cada acumulación.
- Finalmente, la fórmula x-min> = 1 da: x = 1-min
public int minStartValue(int[] nums) {
int prefix = 0, min = 0;
for (int n : nums) {
prefix += n;
min = Math.min(min, prefix);
}
return 1 - min;
}
Análisis de complejidad.
- Complejidad del tiempo: ,
- Complejidad espacial: ,