题目描述:
给定一个整数数组,查找连续的最大和的子数组(至少包含一个数字)并返回其和。
题目举例:
给定输入:[-2,1,-9,4,-1,2,1,-8,4]
输出: 6
题目分析:
因为是求最大连续的和,所以只需要遍历一次就行。
每遍历到一个数,计算下当前连续和的最大值。
例如:
i=0, 当前连续最大值为: -2
i=1, a[1] 大呢?还是a[0]+a[1]大?取大者
若a[1] 大,取从i=1开始计算子串
若a[0]+a[1] 大, 继续计算连续最大子串。
只需O(n) 遍历即可。
代码:
class Solution {
public int maxSubArray(int[] nums) {
int maxcurr = nums[0];
int max = nums[0];
for (int i=1;i<nums.length;i++){
maxcurr = Math.max(nums[i], maxcurr+nums[i]);
max = Math.max(max, maxcurr);
}
return max;
}
}