描述
牛客网: 连续子数组最大和_牛客题霸_牛客网
给定一个长度为 n\n 的数组,数组中的数为整数。
请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。
输入描述:
第一行为一个正整数 n\n ,代表数组的长度。 1\leq n \leq2*10^51≤n≤2∗105
第二行为 n\n 个整数 a_iai,用空格隔开,代表数组中的每一个数。 |a_i| \leq 10^2∣ai∣≤102
输出描述:
连续子数组的最大之和。
示例1
输入:
8 1 -2 3 10 -4 7 2 -5
输出:
18
说明:
经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
思路
以 [ -1, 2, -5, 3, 8]为例
1. subSum[0] = -1, max = -1
subSum[1] = 2, max=2
subSum[2] = -3, max=2
subSum[3] = 0, max=2
subSum[4] = 8, max = 8
import java.util.Scanner;
public class Main{
public static int maxLen(int len, int a[]){
int maxsum;
int subSum[] = new int[len];
subSum[0]=a[0];
maxsum=subSum[0];
for(int i=1;i<len;i++){
subSum[i]=Math.max(subSum[i-1]+a[i],a[i]);
maxsum=Math.max(subSum[i],maxsum);
}
return maxsum;
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int len=input.nextInt();
int[] a= new int[len];
for(int i=0;i<len;i++){
a[i]=input.nextInt();
}
System.out.println(maxLen(len,a));
}
}