給你一個整數數組?nums
?,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
子數組
是數組中的一個連續部分。
示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出:6 解釋:連續子數組?[4,-1,2,1] 的和最大,為?6 。
示例 2:
輸入:nums = [1] 輸出:1
示例 3:
輸入:nums = [5,4,-1,7,8] 輸出:23
這道題是一道動態規劃,我們通過比較nums【i】與dp【i-1】+ nums【i】來判斷這個位置的最大值,代碼如下:
class Solution {
public:int maxSubArray(vector<int>& nums) {int n = nums.size(),ans = -10005;if(n == 1) return nums[0];vector<int> dp(n,0);dp[0] = nums[0];for(int i=1;i<n;i++){dp[i] = max(nums[i],dp[i-1]+nums[i]);}for(int i=0;i<n;i++){ans = max(dp[i],ans);}return ans;}
};
加油