题目描述
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]]
Output: [[1,5]]
Explanation: Intervals [1,4] and [4,5] are considered overlapping.
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
思路
把当前所有区间按照左端点排序,然后维护一个left和right区间,遍历,所有区间,可以更新右端点则更新,否则把当前区间加入ans。
代码
class Solution {
public:
static bool cmp(vector<int>&A, vector<int>& B) {
if (A[0] == B[0]) return A[1] < B[1];
return A[0] < B[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.empty()) return {};
sort(intervals.begin(), intervals.end(), cmp);
int left = intervals[0][0];
int right = intervals[0][1];
vector<vector<int> >ans;
for (int i=1; i<intervals.size(); ++i) {
if (intervals[i][0] > right) {
ans.push_back({left, right});
left = intervals[i][0];
right = intervals[i][1];
}else {
right = max(right, intervals[i][1]);
}
}
ans.push_back({left, right});
return ans;
}
};