public class Solution01 {
public static void main(String[] args) {
int[] arr = {1, -3, 9, 10, -2, 3, -6, 5};
System.out.println(FindGreatestSumOfSubArray(arr));
}
public static int FindGreatestSumOfSubArray(int[] array) {
if(array.length==0)
return 0;
int sum = array[0];//保存每组的和
int maxSum = array[0];//连续子数组最大和
//动态规划
for(int i = 1;i<array.length;i++){
sum = Math.max(sum+array[i],array[i]);
maxSum = Math.max(sum,maxSum);
}
return maxSum;
}
}
while 1: l=map(int,raw_input().split()) sum=l[0] res=[] for i in range(1,len(l)): if sum>0: sum+=l[i] else: sum=l[i] res.append(sum) res=sorted(res) print res[-1] break
import java.util.Arrays; import java.util.Scanner; public class text2 { public static void main(String[] args) { Scanner aScanner=new Scanner(System.in); ArrayList<Integer> arrayList=new ArrayList<Integer>(); for(int i=0;i<8;i++) arrayList.add(aScanner.nextInt()); int bigsum=0; for(int i=0;i<arrayList.size();i++) { if(arrayList.get(i)>0) { int sum=0; for(int j=i;j<arrayList.size();j++) { sum=sum+arrayList.get(j); if(sum<0) break; else { if(bigsum<=sum) bigsum=sum; } } } } System.out.println(bigsum); } }
/**
* 求一个数组中最大和的连续子数组
*/
var arr = [1,2,3,4,-2,-5,0,15,-4,-10,200,17,-20,-21];
var sum = 0,
max = 0;
for(var i = 0; i < arr.length; i++){
if(arr[i] >= 0){
//当前元素为正数,如果之前的和小于0,就重新开始子数组统计,否则纳入到该子数组中
sum = sum < 0 ? arr[i] : sum + arr[i];
//更新最大和
max = Math.max(max,sum);
}else{
//负数情况直接在总和里扣除
sum += arr[i];
}
}
console.log(max);