时间复杂度O(NlogN), 空间复杂度O(N)

[C++ 代码]

#include <algorithm>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param letters intvector<vector<>> 
     * @return int
     */
    int maxLetters(vector<vector<int> >& letters) {
        int n = letters.size();
        // 按长度从小到大排序,相等时按宽度从大到小排序
        sort(letters.begin(), letters.end(), [&](const auto& a, const auto& b){
            return a[0] < b[0] || (a[0]==b[0] && a[1] > b[1]);
        });
        // 求最长严格递增子序列的思路
        vector<int> temp;
        temp.emplace_back(letters[0][1]);
        for(int i=1; i<n; ++i){
            if(letters[i][1] > temp.back()) temp.emplace_back(letters[i][1]);
            else{
                auto it = lower_bound(temp.begin(), temp.end(), letters[i][1]);
                *it = letters[i][1];
            }
        }
        return temp.size();
    }
};