动态规划
一杯小熊
这个作者很懒,什么都没留下…
展开
-
买卖股票的最佳时机(1、2、3)
参考浅谈什么是动态规划以及相关的「股票」算法题 重点在于buy和sell各是一个状态,考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高 class Solution: def maxProfit(self, prices: List[int]) -> int: #考虑当天买和之前买哪个收益更高,当天卖和之前卖哪个收益更高 n = len(prices) buy = -prices[0] sell = 0 .原创 2021-07-27 13:40:36 · 139 阅读 · 0 评论 -
三角形最小路径和
常规解法:二维dp,空间复杂度O(n^2) class Solution: def minimumTotal(self, triangle: List[List[int]]) -> int: n = len(triangle) dp = [[0]*(i+1) for i in range(n)] dp[0][0] = triangle[0][0] for i in range(1, n): for...原创 2021-07-25 17:13:12 · 79 阅读 · 0 评论 -
LeetCode 96 不同的二叉搜索树
思路:动态规划 class Solution: def numTrees(self, n: int) -> int: G = [0]*(n+1) G[0], G[1] = 1, 1 for i in range(2, n+1): for j in range(1, i+1): G[i] += G[j-1] * G[i-j] return G[n] ...原创 2021-04-06 10:29:45 · 47 阅读 · 0 评论 -
剑指Offer 48 最长不含重复字符的子字符串
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 n = len(s) #动态规划 dic = {} res, tmp = 0, 0 for j in range(n): i = dic.get(s[j], -1) dic...原创 2021-03-07 22:12:44 · 60 阅读 · 0 评论 -
一道典型的二维动态规划题目:剑指Offer 47
class Solution: def maxValue(self, grid: List[List[int]]) -> int: #动态规划 m, n = len(grid), len(grid[0]) dp = [[0]*n for _ in range(m)] dp[0][0] = grid[0][0] for i in range(1, m): dp[i][0] = dp[i-...原创 2021-03-07 14:10:25 · 66 阅读 · 0 评论 -
剑指Offer 10-二 青蛙跳台阶问题
典型的动态规划 步骤: 一、问题拆解 二、状态定义 三、递推方程 四、代码实现(注意初始化和边界条件) class Solution: def numWays(self, n: int) -> int: if n == 0: return 1 if n == 1: return 1 dp = [0]*(n+1) dp[0], dp[1] = 1, 1原创 2021-02-24 22:07:18 · 43 阅读 · 0 评论