• 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)

    代码

  • 相关阅读:
    【题解】Candle
    【题解】购物
    【题解】论逼格
    浅谈前缀和
    浅谈 LCA
    浅谈Meet in the middle——MITM
    拓扑排序
    时间复杂度符号
    浅谈排序算法[动图]
    404 页面不存在
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14372930.html
Copyright © 2020-2023  润新知