問題描述:
給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
示例:
輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-subarray
解題思路:
這是一個簡單的動態規劃問題。
可以開闢與數組nums等長額外數組dp,dp[i]代表的是以i結尾的最大子序和:
即 dp[i+1] = max(dp[i]+nums[i+1],nums[i+1)
判斷res = max(res,dp[i])找出最大值
更加簡化一下,可以使用倆個變量來代替,代碼如下:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res = nums[0];
int b=nums[0];
for(int i=1;i<nums.size();i++){
int c = max(nums[i],b+nums[i]);
res = max(c,res);
b = c;
}
return res;
}
};