【贪心】646. 最长数对链

按照算法导论的说法,如果把每一个数对理解为一个活动的开始和结束时间,那么我们的目的是尽可能多的进行更多的活动。
此时对于贪心算法,我么直观上应该选择这样一个活动,选出它后剩下的资源应能被尽量多的其他任务所用。因此,应该选择最早结束的活动,因为他剩下的资源可供他之后尽量多的活动使用。这也是为什么要按照结束时间排序的原因。

class Solution {
public:
    int findLongestChain(vector<vector<int>>& pairs) {
        sort(pairs.begin(), pairs.end(), [](auto &a, auto &b){
            return a[1] < b[1];
        });
        int result = 1, last_right = pairs[0][1];
        int len = pairs.size();
        for(int i=1;i<len;++i)
            if(pairs[i][0] > last_right){
                last_right = pairs[i][1];
                result ++;
            }
        return result;
    }
};
posted @ 2022-03-02 12:49  fwx  阅读(30)  评论(0)    收藏  举报