代码随想录链接:代码随想录
初始化sum=0,记录当前子序列之和
初始化maxSum=Integer.MIN_VALUE,表示最大子序列之和
遍历数组中的每一个数据,每遍历一个,令sum+=nums[i]
更新sum之后,如果sum>maxSum,则令maxSum=sum
更新sum之后,如果sum<0,则令sum=0
最后返回maxSum即可
class Solution {
public int maxSubArray(int[] nums) {
if (nums.length == 1){
return nums[0];
}
int sum = Integer.MIN_VALUE;
int count = 0;
for (int i = 0; i < nums.length; i++){
count += nums[i];
sum = Math.max(sum, count); // 取区间累计的最大值(相当于不断确定最大子序终止位置)
if (count <= 0){
count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和
}
}
return sum;
}
}