zoukankan      html  css  js  c++  java
  • 剑指 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)

  • 相关阅读:
    HDU 2717 Catch That Cow
    补题列表
    Codeforces 862C 异或!
    HDU 2084
    HDU 2037
    Codeforces 492B
    POJ 2262
    Codeforces 1037A
    HDU 1276
    itertools — Functions creating iterators for efficient looping
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/13937943.html
Copyright © 2011-2022 走看看