首页 > 其他分享 >53_Maximum Subarray-最大子数组

53_Maximum Subarray-最大子数组

时间:2024-05-09 22:33:28浏览次数:22  
标签:最大 nums int Maximum 53 数组 Subarray dp 结尾

问题描述

Given an integer array nums, find the subarray with the largest sum, and return its sum.

给定一个数组nums, 找到一个子数组。使它的和最大,返回子数组

例子

Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: 子数组 [4,-1,2,1] 有最大的和6.

基本思想

这是一个动态规划的问题。解题思路类比于最大递增序列。如下:

  • 构建数组dp,其大小为nums的长度。其中dp[i] 表示 以 nums[i] 为结尾的子数组的最大的和
  • 则dp[i]的大小取决于如下两个变量 dp[i-1]+nums[i] , nums[i]
    • 如果 dp[i-1]+nums[i] < nums[i], 则 dp[i] = dp[i-1]+nums[i] 表示nums[i]加入以nums[i-1]为结尾拥有最大和的子数组中
    • 如果 dp[i-1]+nums[i] >= nums[i], 则dp[i] = nums[i] 表示 以nums[i]结尾的最大和的子数组只有一个元素

时间复杂度 O(n),空间复杂度O(n)

代码

C++

   int maxSubArray(vector<int>& nums) {
      if (nums.size()<=0)  return 0;
      int size = nums.size();
      vector<int> dp(size, 0);
      dp[0] = nums[0];
      int maxSum = dp[0];
      for(int i=1;i<size;++i) {
        dp[i] = max(nums[i], nums[i]+dp[i-1]);
        maxSum = max(dp[i], maxSum);
      }
      return maxSum;
    }

python

    def maxSubArray(self, nums: List[int]) -> int:
        if len(nums)<=0: return 0
        dp = [0] * len(nums)
        dp[0] = nums[0]
        for i in range(1,len(nums)):
            dp[i] = max(nums[i], nums[i]+dp[i-1])
        return max(dp)   

标签:最大,nums,int,Maximum,53,数组,Subarray,dp,结尾
From: https://www.cnblogs.com/douniwanli/p/18183214

相关文章

  • LeetCode 1186. Maximum Subarray Sum with One Deletion
    原题链接在这里:https://leetcode.com/problems/maximum-subarray-sum-with-one-deletion/description/题目:Givenanarrayofintegers,returnthemaximumsumfora non-empty subarray(contiguouselements)withatmostoneelementdeletion. Inotherwords,youwa......
  • 153. 寻找旋转排序数组中的最小值
    已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a[n-1]]旋转一次的结果......
  • ZCMU-1153
    思路一个感觉是规律问题的数学问题因为输入的是n所以要的出有关n的关系或者关系有关排序,所以可以从位次入手,设双胞胎前一个位置在ai,后一个在bi.Sum(bi-ai)=(2+3+4+5+6+...+n+1)=(1+2+3+4+5+6+...+n)+n*1=((n+1)*n)/2+n;Sum(ai+bi)=(1+2+3+4+....+2n)=((1+2n)*(2*n))/2......
  • BCM53161XUB0KLFBG、BCM53161XMB0KLFBG、BCM53161XMB0ILFBG: 超低功耗2.5GE交换机介绍
    产品介绍BCM5316X超低功耗2.5GE交换机设计用于SMB、工业和服务提供商市场中的多GE应用。BCM5316X交换机支持四个2.5GESGMII+端口、两个2.5GE/10GEXFI/SFI端口以及多达八个带集成GPHY的10/100/1000Base-T端口。BCM5316X交换机采用28nmRoboSwitch™架构(也称为Robo-2)。BCM5316X集......
  • LeetCode 1373. Maximum Sum BST in Binary Tree
    原题链接在这里:https://leetcode.com/problems/maximum-sum-bst-in-binary-tree/description/题目:Givena binarytree root,return themaximumsumofallkeysof any sub-treewhichisalsoaBinarySearchTree(BST).AssumeaBSTisdefinedasfollows:Thel......
  • (资料)无线电片上系统(SoC) BCM67263B0KFFBG、BCM6715B0KFFBG,BCM53154MB1ILFBG五端口网
    1、BCM67263B0KFFBG—— 4x4802.11beWi-Fi7MAC/PHY/无线电片上系统(SoC)BCM67263是4x4IEEE802.11beWi-Fi7MAC/PHY/无线电片上系统(SoC)器件,可实现新一代超快接入点、路由器和扩展器。支持多链路操作(MLO)、320MHz信道带宽和4KQAM调制,Wi-Fi7创下新性能高吞吐量......
  • [53] Maximum Subarray
    算法助手用户:这题应该怎么做?Givenanintegerarraynums,findthesubarraywiththelargestsum,andreturnitssum.ChatGPT:这个问题是一个非常经典的算法问题,被称为最大子数组和问题,可以通过动态规划(DynamicProgramming)的方法高效解决。我们可以使用一个名为“Kadan......
  • P9753 [CSP-S 2023] 消消乐
    P9753[CSP-S2023]消消乐这题想到了50pts,想不出来怎么优化了。50pts:考虑枚举子串左端点,模拟操作过程,直接用栈模拟,遇到相同的则删去,如果某个时刻栈为空,那么合法子串数加一。考场上只想到为空的时候可消除,下面的性质才是关键的。因为我们枚举左端点,每次只判断了\([l,r]\)的......
  • Git runner 返回报错: status=couldn't execute POST against dial tcp: lookup gitlab
    当发现Gitlab上的runner显示出runneroffline的问题时1查一下gitrunner的报错runner=xxxxstatus=couldn'texecutePOSTagainsthttps://gitlab/api/v4/jobs/request:Posthttps://gitlab/api/v4/jobs/request:dialtcp:lookupgitonx.x.x.x:53:servermisbehaving......
  • P3953 [NOIP2017 提高组] 逛公园
    P3953[NOIP2017提高组]逛公园求有向图中\(1\)到\(n\)的路径中长度小于等于\(dis(1,n)+k\)的方案数。\(dis(1,n)\)表示最短路。\(k\le50\)。部分分\(k=0\),直接最短路计数即可。我们发现有向图中存在后效性,不好动态规划,但我们仔细思考后,在不存在\(0\)边的情况下,设......