给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路:
动态规划问题:
已知前k个元素的最大子序列和为curSum,如果添加第k+1个元素,由于连续子序列限制,如果curSum是小于零的,那么对于增大k+1这个元素从而去组成最大子序列是没有贡献的,所以可以把curSum重新设置为第k+1个元素的值。
public int maxSubArray(int[] nums) {
// 参数校验
if (nums == null || nums.length < 1) {
throw new IllegalArgumentException();
}
int max = Integer.MIN_VALUE;
int curSum = 0;
for (int i : nums) {
// 当前和小于0,就将当前值赋给curSum
if (curSum <= 0){
curSum = i;
}
// 否则进行累加
else {
curSum += i;
}
// 保存较大的值
if (max < curSum) {
max = curSum;
}
}
return max;
}