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 };

 

posted @ 2020-07-07 16:54  Gumpest  阅读(61)  评论(0)    收藏  举报