动态规划
Alwaysion
more persistent for nothing
个人qq:790693499,欢迎来交流
展开
-
【力扣435. 无重叠区间】多种解法:贪心、dp(python3)
目录题目描述思路题解方法1:贪心方法2:dp题目描述https://leetcode-cn.com/problems/non-overlapping-intervals/思路题解方法1:贪心本题可以转化为求不相交的区间个数。贪心算法:1. 按照区间的右端点从小到大排序2. 每次都选择右端点最小的,不会出现重叠的区间,因为这样可以为后侧留下更多的选择空间自己做的代码:class Solution: def eraseOverlapIntervals(self, intervals原创 2021-09-14 20:10:57 · 495 阅读 · 0 评论 -
动态规划总结
目录1. 0-1背包1.1 相关链接1.2 问题描述1.3 解决实现1. 0-1背包1.1 相关链接python解决0-1背包问题(超直观)01背包问题1.2 问题描述有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都只有一件。1.3 解决实现令dp[i][j]来表示前i件物品装入容量为j的背包所能得到的最大总价值。对于dp[i][j]来说,i指的是前i件物品,j指的是还剩下多少背包空间。于原创 2021-08-30 21:36:25 · 388 阅读 · 0 评论 -
【力扣131. 分割回文串】dp(python3)
题目描述https://leetcode-cn.com/problems/palindrome-partitioning/思路题解dp[i]代表s[0~i]的字符串的回文子串是哪些。我们求解的时候每次分成两部分,例如s=aaab:i=0时,dp[0]=[“a”]i=1时,dp[1]=[[“a”,“a”],[“aa”]] (其中[“a”,“a”]为上一步剩下的+s[i],[“aa”]为s[i]逐个往前收揽得到的)以此类推…输入:"aaab"dp数组:[['a']][['a', '原创 2021-08-15 20:06:55 · 154 阅读 · 0 评论 -
【力扣1143. 最长公共子序列】dp多种解法(python3)
题目描述https://leetcode-cn.com/problems/longest-common-subsequence/思路题解dp[i][j]代表text1前i个数和text2前j个数的最长公共子序列的长度class Solution: def longestCommonSubsequence(self, text1: str, text2: str) -> int: m,n=len(text1),len(text2) dp=[[0]*n fo原创 2021-08-11 20:40:12 · 178 阅读 · 0 评论 -
【力扣剑指 Offer 60. n个骰子的点数】dp(python3)
题目描述https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/思路题解dp二维动态规划,第三轮遍历“和-上一轮的骰子数”。dp递归方程dp[i][j]代表i+1个骰子的和为等于j时候的概率。dp[i][j]=Sum(dp[i-1][j-k])0<=i<=n-1,i+1<=j<=6n,1<=k<=6,并判断j-k>=0时就更新dp.初始条件:dp[0][1:7]=[1/6]*6最原创 2021-07-31 15:05:35 · 120 阅读 · 0 评论 -
【力扣剑指 Offer 66. 构建乘积数组】前缀和-多种做法(python3)
题目描述https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof/思路题解前缀和:class Solution: def constructArr(self, a: List[int]) -> List[int]: if not a:return [] n=len(a) l,r=[0]*n,[0]*n l[0],r[0]=a[0],a[n-1]原创 2021-07-31 11:04:41 · 134 阅读 · 0 评论 -
【力扣剑指 Offer 49. 丑数、力扣264】dp+最小堆(python3)
题目描述https://leetcode-cn.com/problems/chou-shu-lcof/思路题解https://leetcode-cn.com/problems/chou-shu-lcof/solution/chou-shu-by-leetcode-solution-0e5i/dpclass Solution: def nthUglyNumber(self, n: int) -> int: dp = [0] * (n + 1) dp[1]原创 2021-07-28 14:33:32 · 103 阅读 · 0 评论 -
【力扣剑指 Offer 46. 把数字翻译成字符串】dp(python3)
题目描述https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/思路题解class Solution: def translateNum(self, num: int) -> int: if num<10:return 1 s=str(num) dp=[0]*len(s) if int(s[0]+s[1])<=25:dp[原创 2021-07-27 16:15:39 · 95 阅读 · 0 评论 -
【力扣剑指 Offer 14- I. 剪绳子、343. 整数拆分、剑指 Offer 14- II. 剪绳子 II】dp(python3)
题目描述https://leetcode-cn.com/problems/integer-break/思路题解dp,其中2、3的要单独考虑,因为2、3单独拆分和正常拆分不一样class Solution: def integerBreak(self, n: int) -> int: if n==2:return 1 if n==3:return 2 dp=[0]*(n+1) dp[2]=2 dp[3]=3原创 2021-07-14 17:01:04 · 99 阅读 · 0 评论 -
【力扣72. 编辑距离】dp(Python3)
题目描述https://leetcode-cn.com/problems/edit-distance/思路题解https://leetcode-cn.com/problems/edit-distance/solution/bian-ji-ju-chi-by-leetcode-solution/状态拆解为3个状态,进行分析:对“dp[i-1][j-1] 表示替换操作,dp[i-1][j] 表示删除操作,dp[i][j-1] 表示插入操作。”的补充理解:以 word1 为 “horse”,word原创 2021-07-13 15:45:04 · 192 阅读 · 0 评论 -
【力扣剑指 Offer 62. 圆圈中最后剩下的数字】模拟递归(超时)+dp(python3)
题目描述https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/思路题解模拟递归(超时)class Solution: def lastRemaining(self, n: int, m: int) -> int: a=[i for i in range(n)] def dfs(index,m): nonlocal a原创 2021-07-13 10:13:43 · 68 阅读 · 0 评论 -
【力扣42. 接雨水】单调栈+dp+双指针(Python3)
题目描述https://leetcode-cn.com/problems/trapping-rain-water/思路题解单调栈https://leetcode-cn.com/problems/trapping-rain-water/solution/trapping-rain-water-by-ikaruga/class Solution: def trap(self, height: List[int]) -> int: def cal(l,cur,r):原创 2021-07-05 17:43:39 · 256 阅读 · 0 评论 -
【力扣96. 不同的二叉搜索树】卡特兰数(python3)
题目描述https://leetcode-cn.com/problems/unique-binary-search-trees/思路图解class Solution: def numTrees(self, n: int) -> int: # https://leetcode-cn.com/problems/unique-binary-search-trees/solution/hua-jie-suan-fa-96-bu-tong-de-er-cha-sou-suo-原创 2021-06-29 13:50:01 · 142 阅读 · 0 评论 -
【力扣279. 完全平方数】完全背包+数学法-四平方和定理+BFS(python3)
题目描述https://leetcode-cn.com/problems/perfect-squares/思路题解完全背包一开始的思路:n=6665的时候,时间超限class Solution: def numSquares(self, n: int) -> int: if n<4:return n dp=[10001]*(n+1) dp[1],dp[2],dp[3],dp[4]=1,2,3,1 for i in原创 2021-06-28 17:56:43 · 187 阅读 · 0 评论 -
【力扣494. 目标和】dp(python3)
题目描述https://leetcode-cn.com/problems/target-sum/思路题解dp[i][j]代表以i结尾的等于j的情况的个数。dp[i][j]=dp[i-1][j-nums[i]]+dp[i-1][j+nums[i]]因为target的正负不影响条件,即target=x和-x的结果一样的,因此j-nums[i]可以取绝对值。最后注意边界情况,当nums[0]=0且j=0时,dp[0][0]=2,而不是1.因为+0,-0都是0class Solution: d原创 2021-06-25 19:51:08 · 247 阅读 · 0 评论 -
【力扣416. 分割等和子集】dp(python3)
题目描述https://leetcode-cn.com/problems/partition-equal-subset-sum/思路题解https://leetcode-cn.com/problems/partition-equal-subset-sum/solution/fen-ge-deng-he-zi-ji-by-leetcode-solution/https://leetcode-cn.com/problems/partition-equal-subset-sum/solution/0-1原创 2021-06-25 15:50:29 · 249 阅读 · 0 评论 -
【力扣221. 最大正方形】dp(python3)
题目描述https://leetcode-cn.com/problems/maximal-square/思路题解哎,又跪了一道dp,不想说啥了。直接看题解吧https://leetcode-cn.com/problems/maximal-square/solution/zui-da-zheng-fang-xing-by-leetcode-solution/我的一开始的思路:dp[i][j][k]=dp[i//2][j//2][k//2] and dp[i//2][j][k//2] and dp[原创 2021-06-25 14:21:43 · 101 阅读 · 0 评论 -
【力扣139. 单词拆分】dp+字典树(待补充)(python3)
题目描述https://leetcode-cn.com/problems/word-break/思路题解dp:https://leetcode-cn.com/problems/word-break/solution/dan-ci-chai-fen-by-leetcode-solution/class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: dp=[False]*(len(s原创 2021-06-24 15:47:22 · 147 阅读 · 0 评论 -
【力扣152. 乘积最大子数组】双dp(python3)
题目描述https://leetcode-cn.com/problems/maximum-product-subarray/思路题解https://leetcode-cn.com/problems/maximum-product-subarray/solution/cheng-ji-zui-da-zi-shu-zu-by-leetcode-solution/双dpclass Solution: def maxProduct(self, nums: List[int]) -> int:原创 2021-06-24 12:25:28 · 131 阅读 · 0 评论 -
【力扣300. 最长递增子序列】动态规划+二分dp+二分贪心(python3)
题目描述https://leetcode-cn.com/problems/longest-increasing-subsequence/思路题解题解链接https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-dong-tai-gui-hua-2/dp代码class Solution: def lengthOfLIS(self, nums原创 2021-06-23 21:30:09 · 229 阅读 · 1 评论 -
【牛客-Shopee 2019校招-Shopee的零食柜 and 力扣410. 分割数组的最大值】dp+二分贪心(python3))
题目描述牛客:https://www.nowcoder.com/test/question/a71f3bd890734201986cd1e171807d30?pid=17091533&tid=45079094力扣:https://leetcode-cn.com/problems/split-array-largest-sum/思路题解https://leetcode-cn.com/problems/split-array-largest-sum/solution/fen-ge-shu-z原创 2021-06-23 15:21:49 · 197 阅读 · 0 评论 -
【牛客-Shopee 2019校招部分编程题汇总】[编程题]Shopee的办公室(二)dp(python3)
题目描述时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64Mshopee的办公室非常大,小虾同学的位置坐落在右上角,而大门却在左下角,可以把所有位置抽象为一个网格(门口的坐标为0,0),小虾同学很聪明,每次只向上,或者向右走,因为这样最容易接近目的地,但是小虾同学不想让自己的boss们看到自己经常在他们面前出没,或者迟到被发现。他决定研究一下如果他不通过boss们的位置,他可以有多少种走法?输入描述:第一行 x,y,n (0<x<=30, 0<原创 2021-06-22 17:06:40 · 310 阅读 · 1 评论 -
【力扣64-最小路径和】dp(golang)
目录题目描述思路题解题目描述https://leetcode-cn.com/problems/minimum-path-sum/思路题解和62-不同路径差不多,是62的进阶版go代码func minPathSum(grid [][]int) int { m:=len(grid) n:=len(grid[0]) p:=make([][]int,m) //初始化dp数组p for i:=0;i<m;i++{ p[i]=make([]int,n) if i==0{ p[0原创 2021-05-29 17:00:54 · 117 阅读 · 0 评论 -
【力扣62-不同路径】dp(golang)
目录题目描述思路题解题目描述https://leetcode-cn.com/problems/unique-paths/思路题解动态规划方程:i=1 or j=1:p[i,j]=1else:p[i,j]=p[i-1,j]+p[i,j-1]go 代码func uniquePaths(m int, n int) int { p:=make([][]int,m) for i:=0;i<m;i++ { p[i]=make([]int,n) if i==0{ for j:=0;原创 2021-05-29 16:28:43 · 111 阅读 · 0 评论 -
【力扣647-回文子串】中心扩展+普通dp+Manacher(高级dp)+回溯(golang+python)
目录题目描述思路题解方法一:中心扩散法方法二:普通dp方法三:manacher(高级dp)题目描述https://leetcode-cn.com/problems/palindromic-substrings/思路题解方法一:中心扩散法func countSubstrings(s string) int { n := len(s) res := 0 expand := func(l, r int) { for l >= 0 && r < n &&原创 2021-05-26 00:06:11 · 164 阅读 · 0 评论 -
【力扣5.最长回文子串】多种解法:动态规划+中心扩散(golang)
目录题目描述思路题解动态规划法中心扩散法题目描述https://leetcode-cn.com/problems/longest-palindromic-substring/思路题解https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/的方法一、二动态规划法带剪枝自敲代码:func longestPalindr原创 2020-12-16 20:25:54 · 364 阅读 · 1 评论 -
【力扣322-零钱兑换】多种解法,01背包+完全背包(golang)
目录题目描述思路题解题目描述https://leetcode-cn.com/problems/coin-change/思路题解01背包:func coinChange(coins []int, amount int) int { dp:=[10000]int{} for i:=0;i<=amount;i++{ dp[i]=amount+1 } dp[0]=0 for i:=1;i<=amount;i++{ for原创 2020-12-15 16:48:27 · 304 阅读 · 0 评论 -
【力扣309-最佳买卖股票时机含冷冻期、股票买卖4:买卖K次】动态规划(golang+python3)
目录题目描述思路题解题目描述https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/思路题解转自:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/solution/zui-jia-mai-mai-gu-piao-shi-ji-han-leng-dong-qi-4/代码如下:func原创 2020-12-11 17:11:11 · 213 阅读 · 0 评论 -
【力扣198-打家劫舍、337. 打家劫舍 III】动态规划(python3+golang)
目录题目描述思路题解题目描述https://leetcode-cn.com/problems/house-robber/思路题解用动态规划的思想,把问题简单化:若当前有0间房屋:ans=0若当前有1间房屋:ans=这1间房屋的金额若当前有2间房屋:ans=这2间房屋的金额的最大值若当前有3间房屋:ans=第2间和第1+3间的最大值若当前有n(n>3)间房屋:ans=选k(第k间+前k-2间之和的金额)和不选k(前k-1间的金额)的最大值代码如下:class Solution:原创 2020-12-05 18:39:20 · 247 阅读 · 0 评论 -
【力扣53-最大子序和】多种解法(2种DP+分治)(python3+go)
目录题目描述思路题解1.动态规划(需额外开辟数组)2.动态规划(不需额外开辟数组)3.分治法题目描述https://leetcode-cn.com/problems/maximum-subarray/思路题解1.动态规划(需额外开辟数组)class Solution: def maxSubArray(self, nums: List[int]) -> int: dp=[nums[0]] for i in range(1,len(nums)):原创 2020-11-30 16:57:07 · 209 阅读 · 0 评论 -
【力扣55-跳跃游戏】动态规划+双指针(python3)
目录题目描述思路题解题目描述https://leetcode-cn.com/problems/jump-game/思路题解从后向前遍历数组,设置一个指针i,指向当前遍历到的元素。设置一个指针j,初始值为0,代表离着到达目的节点的距离为0,不断更新可以到达目的节点的索引i最小的元素。遍历时,判断nums[i]和j的关系:若nums[i]<j,则代表当前节点无法到达索引i最小的那个元素,于是继续向前推进i,并将j+1,因为前面的节点要到达索引i最小的那个元素要比当前元素的距离+1。若nums原创 2020-11-25 15:00:05 · 319 阅读 · 1 评论