給你一個整數數組 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
暴力求解會超出時間限制,這里試一下動態規劃
動態規劃的核心思想是將大問題拆解成一個個小問題
在這道題中用f[i]表示以nums[i]結尾的最大子數組和
若nums[i]左邊的數是一個負數,則不用加
class Solution {
public:int maxSubArray(vector<int>& nums) {int maxnum = nums[0];int n = nums.size();// 若數組中只有一個數,直接返回該數if(n==1)return maxnum;for(int i=1; i<n; i++){if(nums[i-1]>0){nums[i] +=nums[i-1];}maxnum = max(maxnum, nums[i]);}return maxnum;}
};