Tema:
Dada una secuencia de números enteros (positivos y negativos), calcular la suma mínima de subsecuencias requiere una complejidad de tiempo de o (n)
solución java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//获取控制台输入
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String str = sc.nextLine();
String[] split = str.split(",");
int[] arr = stringToInt(split);
int minSubSequenceSum = minSubSequenceSum(arr);
System.out.println(minSubSequenceSum);
}
}
//求最小和
static int minSubSequenceSum(int[] split) {
int thisSum =0;
//注意最小和minSum不能初始化为0
int minSum = split[0];
for (int i = 0; i < split.length; i++) {
thisSum += split[i];
if (thisSum<minSum) {
minSum = thisSum;
} else if (thisSum > 0) {
thisSum = 0;
}
}
return minSum;
}
//字符串数组转int数组
static int[] stringToInt(String[] arrs){
int[] ints = new int[arrs.length];
for(int i=0;i<arrs.length;i++){
ints[i] = Integer.parseInt(arrs[i]);
}
return ints;
}
}
P: ¿Por qué no se pueden inicializar el mínimo y minSum en 0?
Respuesta: Secuencia de entrada 1, 2, 3, 4, la salida correcta es 1. Si la suma mínima minSum se inicializa a 0, entonces thisSum siempre será mayor que minSum, y finalmente se emite 0, ¡un error! !
Pregunta: ¿Por qué thisSum> 0 en la línea 25 de código en lugar de thisSum> minSum?
R: Verifique el cuarto conjunto de muestras de prueba. Si es mayor que minSum, al pasar a 1, thisSum = -1, minSum = -2 Cuando thisSum se restablece a 0, la salida del resultado final es -3, ¡error! ! !
Preste atención a la diferencia entre el tercer grupo y el cuarto grupo de datos de prueba.
Datos de prueba
Entrada 1, 2, 3
salida 1
Entrada
-2, 3, 4 Salida -2
Entrada-2, 3, -4
Salida-4
Entrada -2, 1, -3
Salida-4