LeetCode 动态规划
动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
稚嫩的劢劢
上海交通大学金融硕士在读,对Python、算法、Linux、量化交易感兴趣
展开
-
LeetCode 152. 乘积最大子数组(Python、动态规划)
“最大子数组和”的变型题目描述动态规划思路和算法如果我们用 fmax(i)f_{\max}(i)fmax(i) 来表示以第 iii 个元素结尾的乘积最大子数组的乘积,aaa 表示输入参数 numsnumsnums,那么根据「53. 最大子序和」的经验,我们很容易推导出这样的状态转移方程:fmax(i)=maxi=1n{f(i−1)×ai,ai}f_{\max}(i) = \max_{i = 1}^{n} \{ f(i - 1) \times a_i, a_i \}fmax(i).原创 2020-12-24 20:35:08 · 732 阅读 · 1 评论 -
LeetCode 53. 最大子序和(Python、动态规划、分治(线段树))
学习分治(线段树) 的应用,同时记住递归的空间复杂度(栈的深度)题目描述文章目录方法一:动态规划方法二:分治方法一:动态规划思路和算法假设 nums 数组的长度是 nnn,下标从 000 到 n−1n - 1n−1。我们用 aia_iai 代表 nums[i]nums[i]nums[i],用 dp(i)dp(i)dp(i) 代表以第 iii 个数结尾的「连续子数组的最大和」,那么很显然我们要求的答案就是:max0≤i≤n−1f(i)\max_{0 \leq i \leq n - 1.原创 2020-12-24 14:35:08 · 462 阅读 · 0 评论 -
LeetCode 354. 俄罗斯套娃信封问题(Python、动态规划LIS、贪心+二分查找)
学习这一算法的思想,解决二维LIS问题,字节跳动原题,值得反复学习题目描述该问题为最长递增子序列的二维问题。我们要找到最长的序列,且满足 seq[i+1] 中的元素大于 seq[i] 中的元素。该问题是输入是按任意顺序排列的——我们不能直接套用标准的 LIS 算法,需要先对数据进行排序。我们如何对数据进行排序,以便我们的 LIS 算法总能找到最佳答案?我们可以在这里找到最长递增子序列的解决方法。如果您不熟悉该算法,请先理解该算法,因为它是解决此问题的前提条件。算法:假设我们知道了信封套娃顺.原创 2020-12-21 13:00:04 · 336 阅读 · 0 评论 -
LeetCode 673. 最长递增子序列的个数(Python、动态规划)
题目描述思路与算法假设对于以 nums[i]nums[i]nums[i] 结尾的序列,我们知道最长序列的长度 dp[i]dp[i]dp[i],以及具有该长度序列的个数 count[i]count[i]count[i]。对于每一个 j<ij < ij<i 和一个 nums[j]<nums[i]nums[j] < nums[i]nums[j]<nums[i]如果 dp[j]≥[i]dp[j] \geq [i]dp[j]≥[i] ,那么我们就知道我们有 count[原创 2020-12-11 00:58:19 · 389 阅读 · 0 评论 -
LeetCode 300. 最长上升子序列(Python、动态规划、贪心算法)
学习动态规划和贪心算法的应用题目描述文章目录方法一:动态规划方法二:贪心 + 二分查找方法一:动态规划思路与算法定义 dp[i]dp[i]dp[i] 为考虑前 iii 个元素,以第 iii 个数字结尾的最长上升子序列的长度,注意 nums[i]\textit{nums}[i]nums[i] 必须被选取。我们从小到大计算 dp[]dp[]dp[] 数组的值,在计算 dp[i]dp[i]dp[i] 之前,我们已经计算出 dp[0…i−1]dp[0 \ldots i-1]dp[0…i−1] 的值,.原创 2020-12-09 00:41:51 · 605 阅读 · 1 评论 -
动态规划精讲(一)
文章目录动态规划简介动态规划的背景最优子结构重复子问题解决动态规划问题的思考过程考虑能否将问题规模减小1. 递归2. 自顶向下(记忆化)3. 自底向上(迭代)动态规划简介在这一章中,我们将会为你介绍以下内容:动态规划的背景解决动态规划问题的思考过程动态规划与其它算法的关系动态规划问题的常见分类动态规划的背景动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题转载 2020-12-08 20:40:43 · 1281 阅读 · 0 评论