【代码随想录day 30】 力扣 435. 无重叠区间
视频讲解:https://www.bilibili.com/video/BV1A14y1c7E1/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html#%E8%A1%A5%E5%85%85
力扣题目:https://leetcode.cn/problems/non-overlapping-intervals/
这道题思路也好理解:
- 将数组按升序排序
- 遍历数组,如果有重叠区间,earse++,同时将最长的后边界的元素删除,重点****
- 如果没有重叠区间,更新新的区间即可。
class Solution {
public:static bool cmp(const vector<int> &a, const vector<int> &b){if(a[0] == b[0]){//若第一位相等,按第二位升序排序return a[1] < b[1];}//按第一位升序排序return a[0] < b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), cmp);int earse = 0;int lower = intervals[0][0];int upper = intervals[0][1];for(int i = 1; i < intervals.size(); ++i){//如果数组小于前一个upper,需要消除,earse++,把边界长的删除,比如1,5;2,3就删除1,5if(intervals[i][0] < upper){upper = min(upper, intervals[i][1]);earse++;}//如果数组大于等于前一个upper,不需要消除,更新边界if(intervals[i][0] >= upper){lower = intervals[i][0];upper = intervals[i][1];}}return earse;}
};