[leetcode]435. Non-overlapping Intervals
Analysis
是阴天呢—— [每天刷题并不难0.0]
Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.
Note:
- You may assume the interval’s end point is always bigger than its start point.
- Intervals like [1,2] and [2,3] have borders “touching” but they don’t overlap each other.
Explanation:
把输入的区间按照区间起始点从小到大排序,然后遍历,删除会造成overlap的区间,优先删除覆盖范围比较大的interval~
Implement
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
int eraseOverlapIntervals(vector<Interval>& intervals) {
int len = intervals.size();
//auto cmp = [](const Interval& i1, const Interval& i2) {return i1.start < i2.start;}
sort(intervals.begin(), intervals.end(), cmp);
int res = 0;
int j = 0;
for(int i=1; i<len; i++){
if(intervals[i].start < intervals[j].end){
res++;
if(intervals[i].end < intervals[j].end)
j = i;
}
else
j = i;
}
return res;
}
private:
static bool cmp(const Interval& i1, const Interval& i2){
return i1.start < i2.start;
}
};