53最大子序和

(自己写着玩)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6
(参考官方答案求解)

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

动态规划问题:
因为求连续子数组中元素和的最大值,所以定义一个变量maxnum用以赋值当前的最大值并与之后数组中的元素进行对比并进行更新。
而maxans则是用来比较每个子数组和的大小,并赋值为子数组和最大的值。
开始循环:
maxnum从头开始遍历,当子数组的和加上下一个数组元素的和要大于该数组元素时,就将其加入形成新的子数组,而当
该数组元素要大于子数组与其的加和时,则该子数组到此终止,自当前数组元素开启一个新的子数组。
f(i)=max{f(i−1)+nums[i],nums[i]}
然后通过maxans不断比较这些的大小,并储存最大的,知道遍历完这个数组。

就这样,那么什么是动态规划呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值