【贪心】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;
}
};