[Implementación de algoritmo-Java] Encuentre la suma acumulativa máxima de submatrices consecutivas

[Implementación de algoritmo-Java] Encuentre la suma acumulativa máxima de submatrices consecutivas

1. Descripción del problema:

1. Entrada: introduzca una cadena de caracteres, que es un conjunto de datos, y cada dato está separado por ",". (Es decir, ingrese una cadena de tipo String y convierta la cadena en una matriz de tipo String mediante el método split () de la clase String).

2. Salida: muestra la suma acumulativa máxima de las submatrices de esta matriz.

2. Respuesta a la pregunta:

1. Si la matriz está vacía o la longitud de la matriz es 0, devuelva 0 directamente.

2. Si los datos de la matriz de entrada no tienen un número positivo, como {-6, -2, -3, -5}, la suma acumulativa máxima es el valor máximo de la matriz, es decir, -2.

2. Idea: Inicializar max = Integer.MIN_VALUE (de modo que el valor del primer elemento de la matriz se establezca en la suma acumulativa máxima actual al llamar a Math.max ()), atravesar la matriz a su vez y usar current para registrar la suma acumulativa máxima de la matriz actual. Cuando la corriente <0, establezca la corriente en 0; cuando la corriente> 0, significa que cada acumulación puede ser la suma de acumulación máxima. Entre ellos, cada vez que se atraviesa la matriz, max se usa para el seguimiento y el método Math.max () se usa para obtener el valor máximo de current y max, y luego max se devuelve al final del ciclo.

3. Análisis de algoritmos:

1. La complejidad del tiempo es O (N) y la complejidad del espacio adicional es O (1).

2.Precauciones: Int max = Integer.MIN_VALUE Este paso es muy crítico, si se inicializa a 0, se producirán problemas. Por ejemplo, cuando la entrada son todos números negativos {-6, -2, -3, -5} (igual que arriba), devolverá 0 en lugar de -2.

En el JDK, los tipos enteros tienen un rango de -2147483648 a 2147483647 (-2 ^ 31-2 ^ 31-1).

El valor máximo es Integer.MAX_VALUE, que es 2147483647, y el valor mínimo es Integer.MIN_VALUE, que es -2147483648.

el código se muestra a continuación

import java.util.*;

public class Solution {
    
    
    /**
     * 求连续子数组的最大和
     * @param array string字符串一维数组 数组
     * @return int整型
     */
	public static void main(String[] args) {
    
    
		Scanner in=new Scanner(System.in);
		String str=in.nextLine();
		String[] array=str.split(",");
		int result=findGreatestSumOfSubArray (array);
		System.out.println(result);
	}
    public static int findGreatestSumOfSubArray (String[] array) {
    
    
        //数组为空或数组的长度为0
    	if(array==null||array.length==0) {
    
    
    		return 0;
    	}
    	int max=Integer.MIN_VALUE;
    	int current=0;
    	for(int i=0;i<array.length;i++) {
    
    
    		current+=Integer.valueOf(array[i].toString());
    		max=Math.max(max, current);
    		current=current<0?0:current;
    	}
    	return max;
    }
}

Supongo que te gusta

Origin blog.csdn.net/hkdhkdhkd/article/details/109152226
Recomendado
Clasificación