leetcode 300. Longest Increasing Subsequence

Longest Increasing Subsequence
给定一个数组,找出longest increasing subsequence的长度
这个solution用dynamic programming(DP)方法。
首先,使用vector 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& nums) {
        vector 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();
    }
};

你可能感兴趣的:(leetcode 300. Longest Increasing Subsequence)