首页 > 其他分享 >53. 最大子数组和

53. 最大子数组和

时间:2023-10-23 13:57:00浏览次数:37  
标签:最大 nums res 53 数组 max dp cur

链接

https://leetcode.cn/problems/maximum-subarray/description/

思路

1. 在线处理法:对于一个连续的序列来说,如果它小于0,那么它对于周围所有的数组都是减益效果。试想一下,任何数与负数相加,都小于它本身。根据此,可以用在线处理法,O(n)的时间即可搞定。

2. 动态规划法:这个题存在中间状态可以被dp存储。(但没必要,在线处理其实就是O(1)的dp)。设dp[i]表示以i下标结尾的数组最大和。那么我们能够得到状态转移方程为:

dp[i] = max(dp[i-1]+nums[i], nums[i]). 

代码-在线处理

class Solution:
    def maxSubArray(self, nums) -> int:
        res = nums[0]
        cur_res = 0
        for i in nums:
            cur_res += i
            res = max(cur_res, res)
            if cur_res < 0:
                cur_res = 0
        return res

代码-动态规划

class Solution:
    def maxSubArray(self, nums) -> int:
        dp = nums[:]
        for i in range(1, len(nums)):
            dp[i] = max(dp[i-1] + nums[i], nums[i])
        return max(dp)

 

标签:最大,nums,res,53,数组,max,dp,cur
From: https://www.cnblogs.com/bjfu-vth/p/17782222.html

相关文章

  • 删除排序数组中的重复项 II
    删除排序数组中的重复项II分析设置两个指针一个跑全数组的,一个选择可被覆盖的位置因为是有序的,要保留n个就将慢指针往后推n个代码/***下面代码是保留两个*@param{number[]}nums*@return{number}*/varremoveDuplicates=function(nums){if(nums.le......
  • P1253 扶苏的问题
    \(P1253\)一、题目描述给定一个长度为\(n\)的序列\(a\),要求支持如下三个操作:给定区间\([l,r]\),将区间内每个数都修改为\(x\)。给定区间\([l,r]\),将区间内每个数都加上\(x\)。给定区间\([l,r]\),求区间内的最大值。输入格式第一行是两个整数,依次表示序列的长度\(n\)和操......
  • 删除有序数组中的重复项
    删除有序数组中的重复项分析设置两个指针一个跑全数组的,一个选择可被覆盖的位置判断两个数不同就覆盖,相同就前进代码varremoveDuplicates=function(nums){if(nums.length===0)return0;letfast=1,slow=1;while(fast<nums.length){if......
  • 数组的特点
    数组的特点特点数组元素的类型必须一致,char类型与ACSII码表对应数组元素连续,空间大小一致,呈现线性结构数组长度一旦固定,不可改变,不仅可以存储基本数据类型,还可以存储引用数据类型,数组本身也是引用类型Stringstr={"1","2","3"}优点根据索引去访问元素能存......
  • 前端歌谣的刷题之路-第五十八题-删除数组的最后一个元素
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • Numpy填充或截断数组到固定长度
    首先我们先了解数组对于列表的优势由于在数组中所有的数据类型都是一样的所以,数组的运算效率相对于列表来说是快得多通过效率对比可以发现,数组处理数据的效率要远远高于列表的我们再来介绍如何截断截断很简单,填充使用numpy.pad()numpy.padnp.pad()的参考文档:https://numpy.org/doc......
  • leet code 238. 除自身以外数组的乘积
    238.除自身以外数组的乘积题目解析题目要求O(n)的时间复杂度完成进阶:O(1)空间复杂度完成先不想那么多,先按照暴力思路来一遍对于每一个元素,要求得除自身以外数组的乘积,那么可以遍历所有剩下的元素进行相乘,然后得出结果这样的话时间复杂度来到了:显然不行直接算出所有元素的乘......
  • 合并两个有序数组
    合并两个有序数组分析创建一个新数组将两个数组中的数字进行比较直到其中一个数组比较完进行循环填充至原先的数组中代码varmerge=function(nums1,m,nums2,n){letnum1=nums1.slice(0,m);//截取数组要合并的部分letnum2=nums2.slice(0,n);/......
  • 05_数组
    ......
  • 通过数组的指针获得数组个数
     这几天学习智能指针时,自己在练习写个管理数组指针的类时碰到了通过数组指针获取数组个数的问题1.在网上查询了通过数组指针获取数组个数的方法,对于自定义数据在前四个节点保存了数组个数Student*pAry=newStudent[3];size_tnum=*((size_t*)pAry-1);//3 测试......