思路:nums为给定的数组,动态规划:
设 一维数组:dp[i] 表示 以第i个元素为结尾的一段最大子序和。
1)若dp[i-1]小于0,则dp[i]加上前面的任意长度的序列和都会小于nums[i],则 dp[i] = nums[i];
2) 若dp[i-1] 不小于0, 则 dp[i] = dp[i-1] + nums[i];
边界条件:dp[0] = nums[0] (nums数组的第一个元素的最大长度就是本身)
class Solution { public: int maxSubArray(vector<int>& nums) { int len = nums.size(); if(len == 0) return 0; if(len == 1) return nums[0]; vector<int> dp(len, 0); //dp[i]: 以第i个元素为结尾的最大子序列和 dp[0] = nums[0]; int max_num = dp[0]; for(int i=1; i<len; i++){ if(dp[i-1] > 0) dp[i] = dp[i-1] +nums[i]; else dp[i] = nums[i]; max_num = max(max_num, dp[i]); } return max_num; } };