方法:贪心
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
if (n == 1) return nums[0];
int ans = Integer.MIN_VALUE;
int sum = 0;
//贪心的地方:如果 -2 1 在一起,计算起点的时候,一定是从1开始计算,
//因为负数只会拉低总和,这就是贪心贪的地方
for (int i = 0; i < n; i++) {
sum += nums[i];
//取区间累计的最大值(相当于不断确定区间终止位置)
ans = Math.max(ans, sum);
//当前连续和为负数的时候立刻放弃,从下一个元素重新计算连续和,
//因为负数加上下一个元素,连续和只会越来越小,
//从而不断调整最大子数组和区间的起始位置
if (sum < 0) {
sum = 0;
}
}
return ans;
}
}