leetcode 300. 最长上升子序列 354. 俄罗斯套娃信封问题
2019-10-14 21:27
597 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/crazytom1988/article/details/102557210
讲解:https://mp.weixin.qq.com/s/EWLi6sP3l4xsuc6GDpQAjw
https://mp.weixin.qq.com/s/wK3zCwMtT04DdvTo-FzQ1Q
https://leetcode-cn.com/problems/longest-increasing-subsequence/ (LIS)
O(N^2)解法
[code]class Solution { public: int lengthOfLIS(vector<int>& nums) { if (nums.size() == 0) return 0; vector<int> dp(nums.size(), 1); int ans = 1; for (int i = 1; i < nums.size(); ++i) { for (int j = 0; j < i; ++j) { if (nums[j] < nums[i]) dp[i] = max(dp[i],dp[j]+1); } ans = max(dp[i],ans); } return ans; } };
二分查找 O(NlogN)
[code]class Solution { public: int lengthOfLIS(vector<int>& nums) { if (nums.size() == 0) return 0; int top[nums.size()]={}; int piles = 0; for (int i = 0; i < nums.size(); ++i) { int poker = nums[i]; int left = 0; int right = piles; while(left<right) { int mid = left +((right-left)>>1); if (top[mid] >= poker) { right = mid; } else { left = mid + 1; } } if (left == piles) ++piles; top[left] = poker; } return piles; } };
https://leetcode-cn.com/problems/russian-doll-envelopes/ (俄罗斯套娃)
[code]bool cmp(const vector<int> &a, const vector<int> &b) { if (a[0] == b[0]) return a[1] > b[1]; return a[0] < b[0]; } class Solution { public: int maxEnvelopes(vector<vector<int>>& envelopes) { sort(envelopes.begin(), envelopes.end(), cmp); vector<int> height(envelopes.size()); for (int i = 0; i < envelopes.size(); ++i) height[i] = envelopes[i][1]; return lengthOfLIS(height); } int lengthOfLIS(vector<int>& nums) { if (nums.size() == 0) return 0; int top[nums.size()]={}; int piles = 0; for (int i = 0; i < nums.size(); ++i) { int poker = nums[i]; int left = 0; int right = piles; while(left<right) { int mid = left +((right-left)>>1); if (top[mid] >= poker) { right = mid; } else { left = mid + 1; } } if (left == piles) ++piles; top[left] = poker; } return piles; } };
相关文章推荐
- leetcode 354. Russian Doll Envelopes 俄罗斯套娃 + 动态规划DP + 类似LISS最长递增子序列的做法
- LeetCode 354. Russian Doll Envelopes 俄罗斯套娃信封问题
- leetcode(354)—— Russian Doll Envelopes(俄罗斯套娃信封)
- Leetcode 300. 最长上升子序列
- 动态规划--最长上升子序列问题(LIS) O(n^2) ,O(nlogn)
- LIS 最长上升子序列问题 nlgn时间打印其中一个序列
- POJ (dp最长上升子序列问题)
- 动态规划之最长上升自序列问题
- 10131 Is Bigger Smarter?(最长上升序列问题 + 记忆化搜索)
- hdu4521 小明系列问题——小明序列 线段树 间隔大于d的最长上升子序列
- 最长上升子序列问题(动态规划)
- leetcode 300. Longest Increasing Subsequence 最长上升序列数
- 包信封问题 以及 最长有序子序列问题
- 04_最长上升子序列问题(LIS)
- 三维最长上升子序列问题——HDU 1069 Monkey and Banana
- 动态规划---最长上升子序列问题(O(nlogn),O(n^2))
- 经典动态规划问题--最长上升子序列 POJ--2533
- 最长上升子序列问题(动态规划)
- POJ 1631 HDU 1950(最长上升子序列问题)
- hdu4521小明系列问题——小明序列【最长上升子序列,间隔】