题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 :
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
来源:力扣(LeetCode)
链接:LeetCode
题目分析
(1)每一次遍历到当前元素时,比如遍历到上述示例中的第二个元素1,需要考虑前面元素和加上此元素为-1,与此元素1的大小比较,取较大值1,使得其对结果的贡献尽可能大;
(2)由于遍历过程会覆盖最大结果,因此需要额外变量记录遍历过程中产生的最大和。
(3)同样的,用一个变量记录前序和,每一次比较前序和与当前值。
代码
class Solution {
public int maxSubArray(int[] nums) {
if(nums.length==1) return nums[0];
int maxSum=nums[0];
int preSum=nums[0];
for(int i=1;i<nums.length;i++){
preSum=Math.max(preSum+nums[i],nums[i]);
//比较前序和与当前值,取较大值
maxSum=Math.max(maxSum,preSum);
//用较大值与保存的最大值比较,看是否需要更新最大值
}
return maxSum;
}
}