
题目链接:435. 无重叠区间 - 力扣(LeetCode)
这道题和上一道射箭的题类似,都是求公共区间问题。上一题是一直求公共区间,求到没交集的就次数+1然后更新区间。
这道题是求到有交集的,res+1并更新当前区间,如果下一个区间依旧和更新后的区间有交集,那么res+1并再次更新区间。新区间更新的条件以最小右边界来更新,如果达不到最小右边界那么就是没交集,继续遍历即可,如果当前区间左边界小于更新后的最小右边界,那么证明三个区间有交集,res+1并再次更新最小右边界然后与下一个区间判断。
代码如下:
cpp
class Solution {
public:
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
int res=0;
sort(intervals.begin(),intervals.end(),
[](const vector<int>&cur,const vector<int>nxt){
return cur[0]<nxt[0];
});
for(int i=1;i<intervals.size();++i){
if(intervals[i-1][1]<=intervals[i][0]) continue;
else{
++res;
intervals[i][1]=min(intervals[i-1][1],intervals[i][1]);
}
}
return res;
}
};