zoukankan      html  css  js  c++  java
  • 连续子数组的最大和(Python and C++解法)

    题目:

    输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。

    示例1:

    输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof

    思路:

      使用动态规划解决。

      状态定义:dp[i]代表以元素num[i]为结尾的连续子数组的最大和。

      转移方程: 若 dp[i-1] ≤0 ,说明 dp[i - 1] 对 dp[i] 产生负影响,即此时dp[i-1] + nums[i] < nums[i]。

            当 dp[i - 1] > 0时:执行 dp[i] = dp[i-1] + nums[i];
            当 dp[i - 1] ≤0 时:执行 dp[i] = nums[i];

      注意:由于dp[i]与nums[i]有关,故动态规划可以在数组本身进行,空间复杂度降至O(1),但是考虑到原数组有可能不被允许修改,所以定义变量存储dp[i],dp[i-1]和最大值。

    Python解法:

     1 class Solution:
     2     def maxSubArray(self, nums: List[int]) -> int:
     3         maxSum = nums[0]  # 最大值初始化为第一个元素
     4         predpi = -1  # 记录dp[i-1],初始化为一个负值
     5         curdpi = nums[0]  # 记录当前dp[i]
     6         for num in nums:
     7             if predpi <= 0:
     8                 curdpi = num  
     9             if predpi > 0:
    10                 curdpi = predpi + num
    11             if curdpi > maxSum:
    12                 maxSum = curdpi  #  更新最大子数组的和
    13             predpi = curdpi  # 更新dp[i]
    14         return maxSum

    C++解法:

     1 class Solution {
     2 public:
     3     int maxSubArray(vector<int>& nums) {
     4         int maxSum = nums[0];  // 最大值初始化为第一个元素
     5         int predpi = -1;  // 记录dp[i-1],初始化为一个负值
     6         int curdpi = nums[0];  // 记录当前dp[i]
     7         for(int num: nums) {
     8             if(predpi <= 0)
     9                 curdpi = num;
    10             if(predpi > 0)
    11                 curdpi = predpi + num;
    12             if(curdpi > maxSum)
    13                 maxSum = curdpi;  // 更新最大子数组的和
    14             predpi = curdpi;
    15         } 
    16         return maxSum;
    17     }
    18 };
  • 相关阅读:
    2021.1.28 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2021.1.23 个人rating赛补题报告
    2020.12.14 个人训练赛补题报告
    2020.11.28 2020团体程序设计天梯赛补题报告
    2020.12.3 Codeforces Beta Round #73(Div2)补题报告
    Xhorse VVDI Prog V5.0.6 is Ready for BCM2 Adapter
    Program 2021 Ford Bronco All Keys Lost using VVDI Key Tool Plus
    Xhorse VVDI Prog V5.0.4 Software Update in July 2021
    How to use Xhorse VVDI2 to Exchange BMW FEM/BDC Module?
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13303733.html
Copyright © 2011-2022 走看看