本题同样是去寻找重叠的区间,不过需要将重叠的区间进行合并,那么就需要记录重叠区间的开始和结束,当出现 新的 区间开始 大于 重叠区间结束时,说明可以对前方的重叠区间进行合并。
由于每次都是在新的区间出现时,才将前一个重叠区间的合并结果添加到 result,所以当遍历到最后一个区间时,没有新的区间出现了,需要单独处理,将此时的 left, right也添加到result中。
class Solution {
private:
static bool cmp(vector<int>& A, vector<int>& B){
return A[0] < B[0];
}
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if(intervals.size() <= 1){
return intervals;
}
sort(intervals.begin(), intervals.end(), cmp);
int left = intervals[0][0];
int right = intervals[0][1];
vector<vector<int>> result;
for(int i = 1; i < intervals.size(); i++){
if(intervals[i][0] > right){
result.push_back({left, right});
left = intervals[i][0];
right = intervals[i][1];
}else{
right = max(right, intervals[i][1]);
}
if(i == intervals.size() - 1){
result.push_back({left, right});
}
}
return result;
}
};