以数组intervals
表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
提示:
1 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= starti <= endi <= 10^4
56.合并区间
2个区间的关系有6种,但是其实可以变成上面3种情况(只需要假设第一个区间的起始位置 <= 第二个区间的起始位置,如果不满足这个假设,交换这两个区间)。
所以按照起始位置对所有区间排序,再按照逻辑合并区间就行。逻辑很简单,懒得写了。不会真有人不知道吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> ans; sort(intervals.begin(), intervals.end(), [](vector<int>& a, vector<int>& b){ return a[0] < b[0]; }); int n = intervals.size(); int left = intervals[0][0], right = intervals[0][1]; for(int i = 1; i < n; ++i){ if(right >= intervals[i][0]){ right = max(right, intervals[i][1]); }else{ ans.push_back({left, right}); left = intervals[i][0]; right = intervals[i][1]; } } ans.push_back({left, right}); return ans; } };
|