leetcode 300. Longest Increasing Subsequence

Longest Increasing Subsequence
给定一个数组,找出longest increasing subsequence的长度
这个solution用dynamic programming(DP)方法。
首先,使用vector<int> res来记录当前longest increasing subsequence.
然后遍历nums, 如果res中没有比当前元素n大的元素,就说明n可以作为subsequence新的最后一个元素,以此来增加subsequence的长度。如果res中有比n大的元素,说明n并不能用来增加subsequence的长度,但是不能就这样丢弃n,因为n及n后面的一些元素很有可能替代现在res中的一些元素构成更长的subsequence,所以我们做一个不影响最后长度且能更新元素的方法:用n来替换res中第一个比n大的元素。
最后返回res.size()

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        vector<int> res;
        for (auto n: nums) {
            auto it = lower_bound(res.begin(), res.end(), n);
            if (it == res.end()) res.push_back(n);
            else *it = n;
        }
        return res.size();
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容