问题描述:
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 considerred overlapping.
题源:here;完整实现:here
思路:
将intervals
按start
升序排列,然后遍历intervals
,有intervals[i].end<=intervals[i+1].start
的情况就进行合并,代码如下:
class Solution {
public:
static bool cmp(Interval a, Interval b){
return a.start < b.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
if (intervals.size() == 0) return intervals;
sort(intervals.begin(), intervals.end(), cmp);
int i = 0;
while (i < intervals.size() - 1){
if (intervals[i].end >= intervals[i + 1].start){
intervals[i].end = max(intervals[i + 1].end, intervals[i].end);
intervals.erase(intervals.begin() + i + 1);
}
else i++;
}
return intervals;
}
};