动态规划
nice_evil
这个作者很懒,什么都没留下…
展开
-
【leetcode系列】小菜鸡的leetcode第19题:动态规划入门(6)最优观光组合/买卖股票的最优时机/买卖股票的最优时机II/最优买卖股票时机含冷冻期/买卖股票的最优时机含手续费
类似提醒大同小异: 三道题如下,其实仔细观察,不难发现,第一题和第二题思路几乎一模一样,就是换了个说法,换汤不换药 主要思路为: 【指针i固定,其对应的values[i]也是固定的,也就是说,只需要确定某个数值的指针位置,其对应的数值确定。观光问题比股票问题稍微复杂一点点,i<j:max(values[i]+values[j]+i-j),可以写为i<j:max(values[i]+i)+max(values[j]-j),看成确定的两数之和,分别更新确定两数最大值即可。需要注意的原创 2022-02-17 18:47:49 · 237 阅读 · 0 评论 -
【入门必刷-leetcode题库】剑指offer(第2版)10- II. 青蛙跳台阶问题
class Solution: def numWays(self, n: int) -> int: #本题与动态规划-爬楼梯共有几种爬法相同 if n<=1: return 1 #F=[0]*(n+2) #F[1]=1 a,b,c=0,0,1 #for i in range(2,n+2): # F[i]=F[i-1]+F[i-2] .原创 2022-02-10 11:16:52 · 5891 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第18题:动态规划入门(5)最大子数组和/环形子数组的最大和/乘积最大子数组/乘积为正数的最长子数组长度
1.最大子数组和:跟打家劫舍问题类似,某位置处的值跟前一个有关,但本题有一个问题是,需满足“连续”的条件。也就是说, class Solution: def maxSubArray(self, nums: List[int]) -> int: #指针每次移动1,F(n)为max(sum+F(n-1),F(n)) n=len(nums) #if n==0: # return 0 if n==1: .原创 2022-01-27 21:55:13 · 630 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第17题:动态规划入门(4)跳跃游戏/跳跃游戏2
又是一种类型的动态规划了,还是要尽量找到通解状态,然后再去写递归方程,最后通过边界值来进行递推 【跳跃游戏的精髓是】: 在任意一个位置(指针)k处,若想到达该位置k,那么k之前所有指针可以到达的最大位置的集合的max>=k,即,可以跳到任意位置的通解的数学表达式为: Max(i+nums[i])>=k,其中i+nums[i]为某位置可以跳到的最大位置 class Solution: def canJump(self, nums: List[int]) -> bool:原创 2022-01-21 15:12:52 · 2071 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第16题:动态规划入门(3)打家劫舍/打家劫舍2/打家劫舍变身进阶版:删除并获得点数
【动态规划问题】: 主要是找到第i个状态时候的通解 图解版如下: 1.打家劫舍初级版(从头到尾): class Solution: def rob(self, nums: List[int]) -> int: n=len(nums) if n==0: return 0 if n==1: return nums[0] if n==2: return ma原创 2022-01-18 23:06:02 · 310 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第15题:动态规划入门(2)爬楼梯方法/最小花费爬楼梯
class Solution: def minCostClimbingStairs(self, cost: List[int]) -> int: n=len(cost) if n==0: return 0 if n==1: return cost[0] F=0#初始化上一步爬到顶层的费用 for i in range(2,n): c= F +.原创 2022-01-18 17:17:05 · 160 阅读 · 0 评论 -
【leetcode系列】小菜鸡的leetcode第8题:动态规划入门(1)斐波那契数列/第 N 个泰波那契数
斐波那契原创 2022-01-11 16:21:29 · 204 阅读 · 0 评论