最大子数组的和
思路:
采用动态规划的思路,假设对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且和最大的连续子数组实际上,要么是以第i-1个元素结尾且和最大的连续子数组加上这个元素,要么是只包含第i个元素。
当i-1个元素的最大和大于0时,加上第i个元素自然会更大。
当i-1个元素的最大和小于0时,第i个元素本身更大。
import java.util.*;
public class Main5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s=sc.nextLine();//读入一行string
String[] c=s.split("\\s+");//根据空格进行分割
int[] arr=new int[c.length];
for(int i=0;i<c.length;i++) {
arr[i]=Integer.parseInt(c[i]);//将string转为int型
}
System.out.println(MaxSubArr(arr));
}
private static int MaxSubArr(int[] arr) {
if(arr==null||arr.length==0) {
return 0;
}
int max=arr[0];
int cSum=0;
for(int i=0;i<arr.length;i++) {
if(cSum<0) {
cSum=0;
}
cSum=cSum+arr[i];
if(max<cSum) {
max=cSum;
}
}
return max;
}
}