leetcode 最长递增子序列 中等
Posted Wh1t3zZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 最长递增子序列 中等相关的知识,希望对你有一定的参考价值。
① dp:dp[i] 表示以 i 结尾的最长上升子序列长度,if(dp[j] < dp[i + 1]) dp[i] = max(dp[i], dp[j + 1]),其中 0 <= j < i.
② 贪心 + 二分:看代码比较合适
// dp class Solution { public: int lengthOfLIS(const vector<int>& nums) { vector<int> dp(nums.size(), 1); for(int i = 0; i < nums.size(); ++ i) { for(int j = 0; j < i; ++ j) { if(nums[i] > nums[j]) { dp[i] = max(dp[i], dp[j] + 1); } } } int ret = 0; for(int &len : dp) ret = max(ret, len); return ret; } };
// 贪心 + 二分 class Solution { public: int lengthOfLIS(const vector<int>& nums) { vector<int> tmpLis; for(int i = 0; i < nums.size(); ++ i) { if(tmpLis.empty() || tmpLis.back() < nums[i]) { tmpLis.push_back(nums[i]); } else { auto ptr = lower_bound(tmpLis.begin(), tmpLis.end(), nums[i]); *ptr = nums[i]; } } return (int)tmpLis.size(); } };
以上是关于leetcode 最长递增子序列 中等的主要内容,如果未能解决你的问题,请参考以下文章