返回一个整数数组中最大子数组的和
要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)
import java.util.Scanner; public class sum { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt();//输入n在值,n为随机数组元素的个数 int[] randoms = new int[n];//创建一个元素个数为n的数组 int[] sum = new int[n];//该数组用来下面操作时生成的子数组内的元素和 //假设random数组的第一个值加到第i(i>=0)个值时期间均大于零 //那么sum数组的第i个值就是random的第一个值加到第i个值 //当random数组的第一个值加到第j(j>i,j>=1)个值时小于0 //那么sum的第(j+1)个值为random的第j个值 //当random的第(j+1)个值加到第k(k>=(j+1))个值时期间均大于零 //那么sum的第k个值为random数组的第j个值加到第k个值 //当random数组的第j+1个值加到第s(s>k)个值时小于0 //那么sum的第s+1个值为random数组的第(s+1)个值 //以此类推,得出sum数组 for (int i = 0; i < n; i++) {//给randoms数组赋值 randoms[i] = scan.nextInt(); } sum[0] = randoms[0];//将数组内的第一个值作为第一个子数组 int max = sum[0];//sum数组里最大的数 for (int i = 1; i < n; i++) { /* * 这里要求sum数组之后的元素,求sum[i]时,当sum[i-1]>=0,说明random[i]加上sum[i-1]不会变小, * 那么就让sum[i] = sum[i - 1] + randoms[i] */ if (sum[i - 1] >= 0) { sum[i] = sum[i - 1] + randoms[i]; } else { sum[i]=randoms[i]; } if(max<sum[i]){ max=sum[i]; } } System.out.println(max);//输出最大值 } }