输入一个整型数组,子数组为这个数组中连续的一个或者多个整数组成的数组。求所有子数组中的和的最大值。要求时间复杂度为O(n)。
int[] arr = [1,2,3,4,-2,-5,0,15,-4,-10,200,17,-20,-21];
int 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];
}
}