力扣53最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路:
- 在构造最大子序的时候,每检查一个新的元素,要考虑的是两个问题:
- 将这个元素加入序列的末尾
- 舍弃老序列,以这个元素开头构造序列
- 什么时候将新元素加入序列的末尾呢?
- 新元素和以上个元素为末尾的序列之和,比新元素大的时候。说明以这个元素为末尾的最大序列必须要加上老序列。
- 当新元素和上个元素为末尾的序列之和,比新元素小的时候。说明以这个元素为末尾的最大序列不能加上老序列。
这个时候实际上就是舍弃老序列以新元素开头构造序列了。
在上面的基础上,再构造一个元素记录出现过的最大值,就是最大子序和的值了。下面看代码:
class Solution {
public int maxSubArray(int[] nums) {
int ans = nums[0];
for(int i=1;i<nums.length;i++) {
//用原数组记录以i为结尾的最大子序和
nums[i] = Math.max(nums[i], nums[i-1]+nums[i]);
if(nums[i] >= ans) ans = nums[i];
}
return ans;
}
}