LeetCode53. 最大子序和

题目

分析

直接暴力,枚举每个起始点的最大和

代码

 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         int res = INT_MIN;
 5         for(int i = 0;i < nums.size();i++){
 6             int count = 0;
 7             for(int j = i ;j <nums.size();j++){
 8                 count += nums[j];
 9                 res = max(count,res);
10             }
11         }
12         return res;
13         
14     }
15 };

分析(贪心)

贪心要考虑局部最优。res = res + cur ,如果之前计算的总和为负数,那加上当前元素一定会比当前元素小。当前元素为正数,res < cur ,当前元素为负数,依旧 res < cur 。所以如果之前计算总和为负数,它的作用只会降低总和。故当前和为负数,直接从下一个元素开始就好了。并且要实时存放连续子序列和的最大值。

代码

 1 class Solution {
 2 public:
 3     int maxSubArray(vector<int>& nums) {
 4         int res = INT_MIN;
 5         int count = 0;
 6         for(int i = 0;i < nums.size();i++){
 7             count += nums[i];
 8             if(count > res) res = count;
 9             if(count < 0)  count= 0;
10         }
11         return res;
12         
13     }
14 };

分析(dp)

代码

原文地址:https://www.cnblogs.com/fresh-coder/p/14372930.html