题目如下
数据范围
对区间排序从左到右遍历,维持l作为当前区间的最左边边界就行,维持r作为右端点随后判断区间是否重叠。
通过代码
class Solution {
public:static bool cmp(const vector<int> &a,const vector<int> &b){if(a[0] != b[0])return a[0] < b[0];return a[1] < b[1];}vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begin(),intervals.end(),cmp);vector<vector<int>> ans;int n = intervals.size();int l = intervals[0][0];int r = intervals[0][1];for(int i = 1;i < n;i++){// cout << intervals[i][0] << " " << intervals[i][1] << endl;if(intervals[i][0] > r){ans.push_back({l,r});l = intervals[i][0];r = intervals[i][1];}else{r = max(r,intervals[i][1]);}}ans.emplace_back(vector<int>{l,r});return ans;}
};