leetcode 56. 合并区间
题目如下
数据范围
对区间排序从左到右遍历,维持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;
}
};