子序列问题
动态规划子序列问题
algsup
这个作者很懒,什么都没留下…
展开
-
[线性dp][LIS]leetcode300:最长上升子序列(medium)
思路2动态规划+二分查找,时间复杂度O(nlogn),空间复杂度O(n)。思路1动态规划,时间复杂度O(n。),空间复杂度为O(n)。原创 2020-01-28 14:31:05 · 935 阅读 · 0 评论 -
[LIS]leetcode1218:最长定差子序列(medium)
代码】[LIS]leetcode1218最长定差子序列(medium)原创 2022-07-24 08:08:10 · 262 阅读 · 0 评论 -
[LIS]leetcode1048:最长字符串链(medium)
思路最长上升子序列模型。原创 2022-07-23 22:32:02 · 296 阅读 · 0 评论 -
[子序列问题][dp]leetcode516:最长回文子序列(medium)
题目:题解:动态规划leetcode题解代码如下:class Solution {public: //题解:动态规划,dp[i][j]表示表示s[i...j]的最大回文子序列长度 //状态转移方程:若s[i]==s[j],则dp[i][j]=dp[i+1][j-1]+2;若s[i]!=s[j],则dp[i][j]=max(dp[i][j-1],dp[i+1][...原创 2020-01-06 23:43:44 · 255 阅读 · 0 评论 -
[dp]leetcode1218:最长定差子序列(medium)
题目:题解:思路:动态规划,dp[i] 表示以最后一个元素为 i 的差分子序列的最长长度,状态转移方程为 dp[i]=dp[i-k]+1代码如下:class Solution {public: int longestSubsequence(vector<int>& a, int k) { unordered_map<int,int> dp; int res=0; for(int i:a){原创 2022-02-05 13:28:48 · 567 阅读 · 0 评论 -
[dp][子序列问题]leetcode1771:由子序列构造的最长回文串的长度(medium)
题目:题解:考试时也想到拼接字符串,然而就是没想到怎么判断来自两个不同的字符串s1、s2,说到底还是没有彻底理解状态 dp[i][j] 以及状态转移方程。思路:连接 s1 和 s2为 s,将问题转换为[子序列问题][dp]leetcode516:最长回文子序列(medium),然后再加一个判断条件,来判断来自两个不同的字符串s1、s2。关于 dp 方程的求法以及遍历过程,可以看labudadong的讲解子序列问题通用思路|最长回文子序列。代码如下:const int N = 2原创 2021-02-23 11:25:38 · 228 阅读 · 0 评论 -
[dp]leetcode712:两个字符串的最小ASCII删除和(medium)
题目:题解:动态规划,转换为求1143. 最大公共字串的ASCII码之和。状态:dp[i][j]表示t1[1…i]和t2[1…j]的LCS的ASCII码之和(下标从1开始)状态转移方程:1)若t1[i]==t2[j],则表示t1和t2的LCS增加一位ASCII了,即dp[i][j]=dp[i-1][j-1]+t1[i-1]。2)若t1[i]!=t2[j],则表示t1和t2的LCS...原创 2020-01-30 00:28:04 · 337 阅读 · 0 评论 -
[dp]leetcode1143:最长公共子序列LCS (medium)
题目:题解:动态规划的经典例题,可参考晴神的算法笔记首先先使用暴力法思考吧,设t1和t2的长度分别为m和n,那么对两个字符串中的每个字符,分别只有选和不选两个决策,而得到两个子序列后,比较两个子序列是否相同又需要O(max(m,n)),这样总复杂度为O(2m+n x max(m,n)),这样无法承受数据大的情况。动态规划求最长公共子序列(Longest Common Subsequ...原创 2020-01-30 00:24:09 · 533 阅读 · 0 评论 -
[dp]leetcode673:最长递增子序列的个数(medium)
题目:题解:动态规划,在300. 最长上升子序列的基础上需要记录最长上升子序列的个数。代码如下:class Solution {public: //题解:动态规划,与300. 最长上升子序列思路一样的,不过要计算最长递增子序列的个数 int findNumberOfLIS(vector<int>& nums) { if(num...原创 2020-01-28 22:23:21 · 404 阅读 · 0 评论 -
[dp][区间贪心]leetcode646:最长数对链(medium)
题目:题解:C++:动态规划 || 二分法 || 贪心法(一题多解,由子题想到母题)代码如下:class Solution {public: //题解1:动态规划,时间复杂度O(n^2),空间复杂度O(n) //思路与354. 俄罗斯套娃的题一模一样,就是题目背景换了,哈哈伪装者 int findLongestChain_1(vector<vect...原创 2020-01-28 21:07:47 · 248 阅读 · 0 评论 -
[dp]leetcode354:俄罗斯套娃信封问题(hard)
题目:题解:本题属于300. 最长上升子序列的子题,难点在于如何处理envelopes数组?解决方法当然是排序了,然而这个排序还是比较难想的,我讲一下把。排序:排序的主要作用是降维,将二维数组转换为一维数组,然后进行寻找最长上升子序列。1)若w不相同,则按w由小到大进行排序。这样做的好处是:由于w由小到大进行排序了,那么只有h是上升的才能构成上升的子序列(即w已经可套娃了,判断h是否...原创 2020-01-28 16:05:22 · 843 阅读 · 7 评论