6、最大子序和
关键:动态规划(不是很懂 状态转移方程)
求解以nums[i]为右区间时,和的最大值
若前nums[i-1]的最大和为负,则没必要加上,自己就是最大和
否则,可以加上
此时这个数组里是nums[i]为右区间的,各个最大和
求此数组的最大值即可
1 class Solution { 2 public: 3 int maxSubArray(vector<int>& nums) { 4 vector<int> rightSum(nums.size()); 5 6 rightSum[0] = nums[0]; 7 8 for(int i=1; i < nums.size(); i++){ 9 if(rightSum[i-1]>=0){ 10 rightSum[i] = rightSum[i-1] + nums[i]; 11 } 12 else rightSum[i] = nums[i]; 13 } 14 15 int res = rightSum[0]; 16 for(int i=0; i < nums.size(); i++){ 17 if(res < rightSum[i])res=rightSum[i]; 18 }//枚举 19 20 return res; 21 22 23 } 24 };

浙公网安备 33010602011771号