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

 方法一:动态规划

剑指 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)

相关文章:

  • 2021-08-05
  • 2021-08-21
  • 2022-01-22
  • 2021-12-18
  • 2021-06-02
  • 2021-09-24
  • 2022-02-05
猜你喜欢
  • 2021-12-10
  • 2021-11-27
  • 2021-06-12
  • 2022-02-07
  • 2021-09-13
相关资源
相似解决方案