-
问题
给定一组区间,找出没有重叠区间最多的区间个数。 -
思路[谷歌高畅力扣刷题笔记]
贪心算法,贪心策略是优先保留结尾小且不相交的区间。
首先根据右边界升序排序,然后依次比较左边界和前面的右边界:没有重叠就是满足条件的区间,有重叠就更新右边界。 -
代码
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
if(intervals.empty()) { // 没有元素
return 0;
}
int n = intervals.size();
sort(intervals.begin(), intervals.end(), [](vector<int>& a, vector<int>& b) { // 根据右边界升序排列
return a[1] < b[1];
});
int cnt=0, prev=intervals[0][1]; // prev代表右边界
for(int i=1; i<n; i++) {
if(intervals[i][0] < prev) { // 左边界不在前一个的范围内->没有相交部分
cnt++;
} else { // 左边界在前一个的范围内->更新右边界
prev = intervals[i][1];
}
}
return cnt;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)