题目
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
合并给定的数组中重叠的部分
思路
先排序,按Interval.start的升序排序,然后遍历数组,如果当前元素的start大于之前合并的元素的end,则把当前元素添加到返回结果数组中,否则合并返回结果数组的最后一个元素和当前元素并替换返回结果数组中的最后一个元素。
代码
struct Interval {
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
};
bool cmp(Interval i1, Interval i2) {
if(i1.start < i2.start)
return true;
else if(i1.start > i2.start)
return false;
else
return i1.end < i2.end;
}
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> res;
if(0 == intervals.size())
return res;
sort(intervals.begin(), intervals.end(), cmp);
res.push_back(intervals[0]);
for(int i=1; i<intervals.size(); i++) {
if(intervals[i].start > res[res.size()-1].end) {
res.push_back(intervals[i]);
} else {
res[res.size()-1] = Interval(res[res.size()-1].start, max(intervals[i].end, res[res.size()-1].end));
}
}
return res;
}
};