题目
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进行排序,然后从头开始遍历Interval,对遍历到的每一个Interval(用current表示),将其终止点作为界限,检查其后的Interval的起始点是否小于或等于界限,如果小于或等于界限,则比较该Interval的终止点和界限来决定是否对界限进行更新,并继续检查后面的Interval,否则就将current的起始点和界限作为一个新的Interval记录下来,并继续遍历(当然已经检查过并进行合并操作的Interval就不需要遍历了)。
下面是AC的代码:
/**
* 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(struct Interval a, struct Interval b){
return a.start < b.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> ans;
sort(intervals.begin(), intervals.end(), compare);
vector<Interval>::iterator i, j;
for(i = intervals.begin(); i != intervals.end(); i++){
int temp = i->end;
for(j = i + 1; j != intervals.end(); j++){
if(j->start <= temp){
temp = max(temp, j->end);
}
else{
break;
}
}
j--;
ans.push_back(Interval(i->start, temp));
i = j;
}
return ans;
}
};
111