Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
Given
[1,3],[2,6],[8,10],[15,18],return
[1,6],[8,10],[15,18].T:
First sort the intervals by each start value. Then merge the intervals from the beginning. Once we cannot keep merging, push a new interval to the return vector, keep trying merging the following ones.
A:
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool compare(const Interval & inter1, const Interval & inter2) {
if(inter1.start < inter2.start) {
return true;
} else {
return false;
}
}
vector< Interval > merge(vector< Interval > &intervals) {
vector< interval > ret;
if(intervals.size() == 0) {
return ret;
}
sort(intervals.begin(), intervals.end(), compare);
Interval inter = intervals[0];
for(int i=1; i < intervals.size(); i++) {
if(inter.end >= intervals[i].start) {
inter = Interval(inter.start, max(inter.end, intervals[i].end));
} else {
ret.push_back(inter);
inter = intervals[i];
}
}
ret.push_back(inter);
return ret;
}
};
No comments:
Post a Comment