题目:
给出若干闭合区间,合并所有重叠的部分。
样例
给出的区间列表 => 合并后的区间列表:
[ [
[1, 3], [1, 6],
[2, 6], => [8, 10],
[8, 10], [15, 18]
[15, 18] ]
]
先将区间按下限排序,再判断区间有没有重叠部分,如果有,更改区间上下限,然后将重叠部分删除。
具体代码:
/**
* Definition of Interval:
* classs Interval {
* int start, end;
* Interval(int start, int end) {
* this->start = start;
* this->end = end;
* }
*/
bool inorder(Interval c,Interval d){
return c.start<d.start;
}
class Solution {
public:
/**
* @param intervals: interval list.
* @return: A new interval list.
*/
vector<Interval> merge(vector<Interval> &intervals) {
// write your code here
sort(intervals.begin(),intervals.end(),inorder);
if(intervals.size()==0)return intervals;
else {for(int i=0;i<intervals.size()-1;i++){
for(int j=i+1;j<intervals.size();j++){
if(intervals[i].end>=intervals[j].start&&intervals[i].end<intervals[j].end){
intervals[i].end=intervals[j].end;
intervals.erase(intervals.begin()+j);
j=i;
}
else if(intervals[i].start<=intervals[j].start&&intervals[i].end>=intervals[j].end){
intervals.erase(intervals.begin()+j);
j=i;
}
}
}
return intervals;
}
}
};
感想:
通过此题,对sort函数有了进一步认识,可以自己构造比较函数。其次要注意在区间重叠的不同情况下的不同处理方法。