• 剑指 Offer 42. 连续子数组的最大和


    思路

     方法一:动态规划

     1 class Solution {
     2 public:
     3     int maxSubArray(vector<int>& nums) {
     4         //memo[i]表示以nums[i]结尾并且包含nums[i]的子数组的最大和
     5         vector<int> memo(nums.size());
     6         memo[0] = nums[0];
     7 
     8         for(int i = 1; i < nums.size(); ++i) {
     9             if(memo[i-1] > 0)
    10                 memo[i] = memo[i-1] + nums[i];
    11             else
    12                 memo[i] = nums[i];
    13         }
    14 
    15         int maxSum = memo[0];
    16         for(int i = 1; i < memo.size(); ++i) {
    17             if(memo[i] > maxSum)
    18                 maxSum = memo[i];
    19         }
    20 
    21         return maxSum;
    22     }
    23 };

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(n)

     方法二:模拟

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

    复杂度分析

    时间复杂度:O(n)

    空间复杂度:O(1)

  • 相关阅读:
    git使用
    javascript关于事件与闭包
    Ajax和跨域
    通过触发器进行的操作
    30分钟学会jquery插件
    那些年用过的jquery插件
    网页设计常用网页技巧
    XML操作
    效果A:浏览器跳转以及判断来路客户信息
    数据库
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/13937943.html
Copyright © 2020-2023  润新知