leetcode算法题--最长数对链
原题链接:https://leetcode-cn.com/problems/maximum-length-of-pair-chain/
1、动态规划
dp[i]表示第i个位置最长的数对链的长度
状态转移
dp[i]=max(dp[j]+1); j从0到i
不过题目的数对是可以乱序的,所以我们先提前给按数对第一个数来从小到大排序,然后再进行动态规划。其实根据第二种贪心算法,按第二个数来排序更好!
static bool lessVector(const vector<int>&vec1,const vector<int>&vec2){return vec1[0]<vec2[0];}int findLongestChain(vector<vector<int>>& pairs) {int m=pairs.size();int n=pairs[0].size();sort(pairs.begin(),pairs.end(),lessVector);vector<int> dp(m,0);dp[0]=1;int max_len=INT_MIN;for(int i=1;i<m;i++){for(int j=0;j<i;j++){dp[i]=max(dp[i],pairs[i][0]>pairs[j][n-1]?dp[j]+1:dp[j]);}max_len=max(max_len,dp[i]);}return max_len;}
2、贪心算法
按数对第二个数排序,这样就可以从所有符合条件的下一个数对中找第二个数最小的数对,达到贪心的效果。
static bool lessVector(const vector<int>&vec1,const vector<int>&vec2){return vec1[1]<vec2[1];
}
int findLongestChain(vector<vector<int>>& pairs) {int m=pairs.size();int n=pairs[0].size();sort(pairs.begin(),pairs.end(),lessVector);int cur=INT_MIN;int count=0;for(int i=0;i<m;i++){if(cur<pairs[i][0]){cur=pairs[i][1];count++;}}return count;
}
可以看出第二个数权重更大
leetcode算法题--最长数对链相关推荐
- leetcode算法题--最长字符串链
原题链接:https://leetcode-cn.com/problems/longest-string-chain/ 动态规划 dp[i]表示在i处最长字符串链长度 状态转移 dp[i]=max(d ...
- leetcode算法题--最长快乐字符串★
原题链接:https://leetcode-cn.com/problems/longest-happy-string/ 贪心算法 class Solution {public:static bool ...
- leetcode算法题--最长定差子序列
原题链接:https://leetcode-cn.com/problems/longest-arithmetic-subsequence-of-given-difference/ 相关题目:最长等差数 ...
- leetcode算法题--最长等差数列★
原题链接:https://leetcode-cn.com/problems/longest-arithmetic-sequence/ 动态规划 dp[i][dif]表示i位置上差为dif的等差数列的最 ...
- leetcode算法题--最长公共子数组
原题链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/ 相似题目:最长公共子序列 只不过这里必须是连续的, ...
- leetcode算法题--最长公共子序列★
原题链接:https://leetcode-cn.com/problems/longest-common-subsequence/ 动态规划 dp[i][j]表示text1[:i]和text2[:j] ...
- leetcode算法题-- 最长递增子序列的个数★
原题链接:https://leetcode-cn.com/problems/number-of-longest-increasing-subsequence/ 相关题目:最长上升子序列 lengths ...
- leetcode算法题--最长回文子序列★★
原题链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence/ 注意不是回文子串,子串必须是连续! dp[i][j]表示字 ...
- leetcode算法题--最长湍流子数组
原题链接:https://leetcode-cn.com/problems/longest-turbulent-subarray/ 相关问题:摆动序列 使用双dp保存状态. up[i]表示如果在i点是 ...
最新文章
- ecshop 属性自动组合_【深度文章】结构设计中的荷载组合剖析(下)
- 使用vs2010+WCF发布json数据,ExtJS4.0进行调用
- python真的是吹过了-别再无脑吹了,python和matleb有什么不同你知道吗?
- [转载]让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求
- 为你揭秘小程序音视频背后的故事......
- 用 CSS 隐藏页面元素
- 直流调速系统概述工作原理实训教学
- 王垠 java,王垠,40行代码,JAVA吧的大神怎么评论?
- 华为鸿蒙OS精品资料汇总,持续更新中
- 中级微观经济学 复习框架思维导图-平狄克
- 如何注册企业邮箱,联系人邮箱是什么?
- @Controller注解的一些理解吧
- c语言考试排座位系统源程序,c语言_排考场座位问题:.doc
- 九宫格构图学习[1]
- 在openEuler 21.9安装自带的容器软件Docker、podman、skopeo
- 【软件测试】数据库大厂面试真题解析(二叉树算法纯干货!)
- 由邻居蹭网引发的天翼宽带猫与磊科路由的硬件搭线及软件连接探索
- AVI和WAV格式文件分析
- mysql差异备份与多实例部署
- 电子元器件分销业ERP系统供应链解决方案