随笔分类 -  算法 / 动态规划类

摘要:647. 回文子串 1、中心扩散法+双指针 class Solution: def countSubstrings(self, s: str) -> int: res = 0 for i in range(len(s)): # 以 i 为中心 res += self.countPalind(i, i 阅读全文
posted @ 2023-12-06 15:01 忆象峰飞 阅读(13) 评论(0) 推荐(0) 编辑
摘要:583. 两个字符串的删除操作 class Solution: def minDistance(self, word1: str, word2: str) -> int: n, m = len(word1), len(word2) # dp 数组代表使得 word1 以 i-1 结尾和 word2 阅读全文
posted @ 2023-12-05 17:23 忆象峰飞 阅读(5) 评论(0) 推荐(0) 编辑
摘要:392.判断子序列 1、双指针 class Solution: def isSubsequence(self, s: str, t: str) -> bool: m, n = len(s), len(t) i, j = 0, 0 while m > i and n > j: if s[i] == t 阅读全文
posted @ 2023-12-05 16:53 忆象峰飞 阅读(8) 评论(0) 推荐(0) 编辑
摘要:1143.最长公共子序列 class Solution: def longestCommonSubsequence(self, text1: str, text2: str) -> int: m, n = len(text1), len(text2) # dp 数组代表 text1 以 i-1 结尾 阅读全文
posted @ 2023-12-05 15:11 忆象峰飞 阅读(6) 评论(0) 推荐(0) 编辑
摘要:300.最长递增子序列 class Solution: def lengthOfLIS(self, nums: List[int]) -> int: if len(nums) <= 1: return len(nums) # dp 数组代表以下标 i 结尾包含 nums[i] 的最长递增子序列长度为 阅读全文
posted @ 2023-12-01 16:42 忆象峰飞 阅读(13) 评论(0) 推荐(0) 编辑
摘要:309.最佳买卖股票时机含冷冻期 class Solution: def maxProfit(self, prices: List[int]) -> int: # dp[i][0] 持有股票 # dp[i][1] 卖出股票那一天 # dp[i][2] 冷冻期 # dp[i][3] 保持卖出股票的状态 阅读全文
posted @ 2023-12-01 15:21 忆象峰飞 阅读(5) 评论(0) 推荐(0) 编辑
摘要:123.买卖股票的最佳时机III class Solution: def maxProfit(self, prices: List[int]) -> int: if len(prices) <= 1: return 0 if len(prices) == 2: return max(0, price 阅读全文
posted @ 2023-11-30 22:36 忆象峰飞 阅读(10) 评论(0) 推荐(0) 编辑
摘要:121. 买卖股票的最佳时机 1、动态规划 class Solution: def maxProfit(self, prices: List[int]) -> int: # dp[i][0] 代表第 i 天持有股票获取的最大利益 # dp[i][1] 代表第 i 天不持有股票获取的最大利益 dp = 阅读全文
posted @ 2023-11-30 19:48 忆象峰飞 阅读(10) 评论(0) 推荐(0) 编辑
摘要:198.打家劫舍 1、动态规划 class Solution: def rob(self, nums: List[int]) -> int: # dp 数组代表在第 i 个房间可以偷窃到的最高金额为 dp[i] dp = [0] * len(nums) if len(nums) == 1: retu 阅读全文
posted @ 2023-11-30 19:15 忆象峰飞 阅读(14) 评论(0) 推荐(0) 编辑
摘要:139.单词拆分 class Solution: def wordBreak(self, s: str, wordDict: List[str]) -> bool: dp = [False] * (len(s) + 1) dp[0] = True # 求排列先遍历背包再遍历物品 for i in r 阅读全文
posted @ 2023-11-30 17:51 忆象峰飞 阅读(10) 评论(0) 推荐(0) 编辑
摘要:70. 爬楼梯 (进阶) 1、使用 01 背包解法 class Solution: def climbStairs(self, n: int) -> int: # dp 数组代表爬上第 i 阶有 dp[j] 种方法 dp = [0] * (n + 1) dp[0] = 1 m = 2 # 排列先背包 阅读全文
posted @ 2023-11-30 16:16 忆象峰飞 阅读(3) 评论(0) 推荐(0) 编辑
摘要:[完全背包] 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。 1、先遍历物品再遍历背包 def all_bag(weight, value, bag 阅读全文
posted @ 2023-11-30 15:29 忆象峰飞 阅读(6) 评论(0) 推荐(0) 编辑
摘要:1049.最后一块石头的重量II class Solution: def lastStoneWeightII(self, stones: List[int]) -> int: total = sum(stones) target = total // 2 dp = [0] * (target + 1 阅读全文
posted @ 2023-11-27 21:53 忆象峰飞 阅读(4) 评论(0) 推荐(0) 编辑
摘要:[背包基础] 题目:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 1、二维方式解决背包问题 class Solution: def solve_bag(self, wei 阅读全文
posted @ 2023-11-24 12:31 忆象峰飞 阅读(4) 评论(0) 推荐(0) 编辑
摘要:96.不同的二叉搜索树 1、关键点找出状态转移方程 class Solution: def numTrees(self, n: int) -> int: # 创建 dp 数组, dp[i] 代表节点数为 i 的二叉搜索树数量 dp = [0]*(n+1) # 初始化数组 dp[0] = 1 # 遍历 阅读全文
posted @ 2023-11-24 11:00 忆象峰飞 阅读(2) 评论(0) 推荐(0) 编辑
摘要:62.不同路径 class Solution: def uniquePaths(self, m: int, n: int) -> int: # dp[i][j] 代表到达 dp[i][j] 有多少不同路径 dp = [[0]*n for _ in range(m)] # 初始化 for i in r 阅读全文
posted @ 2023-11-23 20:40 忆象峰飞 阅读(1) 评论(0) 推荐(0) 编辑
摘要:509. 斐波那契数 1、动态规划 class Solution: def fib(self, n: int) -> int: if n <= 1: return n # dp[i] 代表第 i 个数的斐波那契值 dp = [0] * (n+1) dp[0] = 0 dp[1] = 1 for i 阅读全文
posted @ 2023-11-17 23:31 忆象峰飞 阅读(8) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示