leetcode746、198、剑指offer42-动态规划题

这三题解题思路相同,也是我个人比较喜欢的动态规划题。
leetcode746:
cost = [10,15,20]
创建一个二维数组如下:
dp = [[0,0],[0,0],[0,0],[0,0]]
赋值:
dp = [[0,0],[0,10],[10,15],[15,10+20]]
最后reture min[15,10+20]
思路:
dp[k][0]代表第k个阶梯不走,dp[k][1]代表第k个阶梯走
dp[k][0] = dp[k-1][1]
dp[k][1] = min(dp[k-1][0]+cost[k],dp[k-1][1]+cost[k])
代码:

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if cost == []:
            return 0
        if len(cost)<3:
            return min(cost)
        dp = [[0,0] for _ in range(len(cost)+1)]
        dp[1] = [0,cost[0]]
        for i in range(1,len(cost)):
            dp[i+1] = [dp[i][1],min(dp[i])+cost[i]]
        return min(dp[-1])

同理leetcode198

class Solution:
    def rob(self, nums: List[int]) -> int:
        if len(nums)<3 and len(nums)>0:
            return max(nums)
        if len(nums) ==0:
            return 0
        sumlist = [0,nums[0]]
        for i in range(1,len(nums)):
            sumlist.append(max((sumlist[-2]+nums[i]),sumlist[-1]))
        return sumlist[-1]

剑指offer42题解为:

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if len(nums) == 0:
            return 0
        if len(nums) == 1:
            return nums[0]
        neinf = float('-inf')
        dp= [[0,0] for _ in range(len(nums))]
        dp[0] = [neinf,nums[0]]
        for i in range(1,len(nums)):
            dp[i] = [max(dp[i-1][0],dp[i-1][1]),nums[i]+max(0,dp[i-1][1])]
        return max(max(row) for row in dp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝翔厨师长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值