一个网站做3个关键词够,广告设计公司招聘,高端包装设计,我要自学网ps视频教程免费0. ref
参考自
1. 题目描述 预定会议问题#xff1a;给定我们一堆区间#xff0c;区间不能重叠#xff08; [ 1 , 2 ] [1,2] [1,2] 和 [ 2 , 3 ] [2,3] [2,3] 的 2 2 2 不算重叠#xff09;#xff0c;求最多能保留多少个区间#xff1f; 做法#xff1a;贪心#…0. ref
参考自
1. 题目描述 预定会议问题给定我们一堆区间区间不能重叠 [ 1 , 2 ] [1,2] [1,2] 和 [ 2 , 3 ] [2,3] [2,3] 的 2 2 2 不算重叠求最多能保留多少个区间 做法贪心按**【右端点】**排序。 为什么要按照右端点排序反证如果按照左端点排序看下面的例子
|_________| 区间a|___| 区间b |__| 区间c |______| 区间d 如果按照左端点升序的话那么答案就是 2 2 2 了但显然答案应该是 3 3 3。 我们把区间的左右端点比作会议的开始和结束时间一句话开始早的会议不一定结束早 如果我们按照右端点排序那么一定能留给后面的会议更长的时间。 本题其实还有另外一种做法 L C S LCS LCS只不过是一个二维 L C S LCS LCS 问题而且由于区间之间不是严格大于的原因为我们避免了不必要的麻烦 参见 my blog here我们可以直接 sort不需要制定自定义 cmp。 只不过第一种做法是 O ( N l o g N N ) O(Nlog^{N} N) O(NlogNN)而 L C S LCS LCS 是 O ( N l o g N N l o g N ) O(Nlog^{N} Nlog^{N}) O(NlogNNlogN)常数大一点罢了。 2. 思路 3. 代码
class Solution {
public:int eraseOverlapIntervals(vectorvectorint intervals) {sort(intervals.begin(), intervals.end(), [](auto x, auto y){if(x[1] y[1]) return x[0] y[0];return x[1] y[1];});int res 0;int right -2e9;for(auto x : intervals) {if(x[0] right) {right x[1];res ;}}return intervals.size() - res;}
};