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 最长递增子序列 中等的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题 最长递增子序列

力扣LeetCode-300. 最长递增子序列-题解

力扣LeetCode-300. 最长递增子序列-题解

最长递增子序列(NC91/考察次数Top32/难度中等)

Leetcode 300. 最长递增子序列

力扣LeetCode-1713. 得到子序列的最少操作次数-题解-最长递增子序列