动态规划
文章平均质量分 52
zingghalo
这个作者很懒,什么都没留下…
展开
-
NC403 编辑距离为一\NC196 编辑距离(一)、NC35 编辑距离(二)
NC403给定两个字符串 s 和 t ,如果两个字符串的编辑距离是1(仅用一次增删改), 则输出 true 否则输出 false。 #看是否能依据删除(当有一个长)或者修改s[i](两个字符串一样长)来使s=t class Solution: def editdistance(self , s: str, t: str) -> bool: if abs(len(s)-len(t))>1 or s==t: return False ..原创 2022-05-07 23:18:47 · 217 阅读 · 0 评论 -
42. 接雨水、NC168 盛水最多的容器
题:给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。42. 接雨水 - 力扣(LeetCode) (leetcode-cn.com) ##法一动态规划 用动态规划的方法提前得到每个位置两边的最大高度leftMax[i]和 rightMax[i] 对于0≤i<n, 下标i处能接的雨水量=min(leftMax[i],rightMax[i])−height[i]. class Solution: ...原创 2022-05-03 17:02:35 · 330 阅读 · 0 评论 -
NC145 01背包 问题、完全背包问题
1.题:有N件物品和一个最多能被重量为m 的背包。一个物品只有两个属性:重量和价值。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次, 求解将哪些物品装入背包里物品价值总和最大。 0-1 背包问题无法使用贪心算法来求解,也就是说不能按照先添加性价比最高的物品来达到最优,这是因为这种方式可能造成背包空间的浪费,从而无法达到最优。 #动态规划dp[i][j]表示前i件物品 体积不超过j 能达到的最大价值 #根据第 i 件物品是否添加到背包中状态转移方程为:dp..原创 2022-05-01 22:06:11 · 342 阅读 · 0 评论 -
BM79 打家劫舍(二)、BM65 最长公共子序列(二)、BM66 最长公共子串、BM68 矩阵的最小路径和、BM69 把数字翻译成字符串
1.BM79 打家劫舍(二) 题:为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家,就不能再偷第二家,如果偷了第二家,那么就不能偷第一家和第三家。且第一个房间和最后一个房间视为相邻。计算在不被发现的前提下最多的偷窃金额。 #对于一个人家,我们选择偷他或者不偷他,如果我们选择偷那么前一家必定不能偷;如果选择不偷他,那我们最多可以取得上一级的收益 #移方程为dp[i] = max(dp[i - 1], nums[i - 1] + dp[i - 2]) #既然是个环,那么第一家和最后一家不能同时偷。所原创 2022-04-20 21:22:59 · 364 阅读 · 0 评论 -
动态规划:300. 最长递增子序列、DP7 连续子数组的最大乘积、DP13 [NOIP2002 普及组] 过河卒、DP23 不相邻取数、801. 使序列递增的最小交换次数
给你一个整数数组nums,找到其中最长严格递增子序列的长度。 #状态转移方程 dp[i]=max(dp[j]+1,d[i]) j=1,...,i 且满足nums[i]>nums[j] class Solution: def lengthOfLIS(self, nums: List[int]) -> int: res=1 dp=[1 for i in range(len(nums))] for i in range(len(n...原创 2022-04-17 22:04:19 · 494 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题、剑指 Offer 10- I. 斐波那契数列
#动态规划 #DP class Solution: def fib(self, n: int) -> int: res=[0,1]#初始状态 for i in range(2, n+1): res.append(res[i-1]+res[i-2])#转移方程:res[i]=res[i-1]+res[i-2] return res[n]% (10 ** 9 + 7) #最优化DP方法: class Solution.原创 2022-03-28 12:35:48 · 116 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润、剑指 Offer 42. 连续子数组的最大和、剑指 Offer 47. 礼物的最大价值、BM81 买卖股票的最好时机(二)、BM82 买卖股票的最好时机(三)
题:把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润 题:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 题:从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。计算最多能拿到多少价值的礼物? 剑指 Offer 63. 股票的最大利润、剑指 Offer 42. 连续子数组的最大和、剑指 Offer 47. 礼物的最大价值原创 2022-03-28 18:09:49 · 105 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
class Solution: def translateNum(self, num: int) -> int: #使用余数来取当前数值 绝! res0,res1=1,1 y=num%10 num=num//10 while num!=0: x=num%10 #从右往左遍历也是一样的 if 10 <= 10 * x + y <= 25: ...原创 2022-04-01 22:47:55 · 58 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串、剑指 Offer 48. 最长不含重复字符的子字符串
#固定右边界 j ,同时定义从边界 j 往左侧距离最近的相同字符的索引为 i 例如:“abcba”,索引从0开始。 j=2时最长字符串”abc",即res[2]=3。 1、j=3时有b,而上一个b在res[j-1]=”abc"里,即j-i<res[j-i], 按j-i计算res[j],此时最长字符串为“cb”的 长度2。 2、j = 4时有s[j]=a,上一个a在子字符串res[j-1]=“cb”之外,以a结尾的字符串自然在res[j-1]的基础上加上字符s[j]=a就构成了新的...原创 2022-04-02 14:46:18 · 224 阅读 · 0 评论