描述
给出若干闭合区间,合并所有重叠的部分。
您在真实的面试中是否遇到过这个题?
是
样例
Given intervals => merged intervals:
[ [
(1, 3), (1, 6),
(2, 6), => (8, 10),
(8, 10), (15, 18)
(15, 18) ]
]
挑战
O(n log n) 的时间和 O(1) 的额外空间。
根据挑战内容得要求可知应当使用堆排序。
(我治理稍微偷懒使用了STL的排序函数)
/**
* Definition of Interval:
* classs Interval {
* int start, end;
* Interval(int start, int end) {
* this->start = start;
* this->end = end;
* }
* }
*/
class Solution {
public:
/**
* @param intervals: interval list.
* @return: A new interval list.
*/
static bool cmp(const Interval &a, const Interval &b){
return a.start<b.start;
}
vector<Interval> merge(vector<Interval> &intervals) {
// write your code here
if(intervals.empty())
return intervals;
sort(intervals.begin(),intervals.end(),cmp);
for(int i=0;i+1<intervals.size();i++){
if(intervals[i].end>=intervals[i+1].start){
if(intervals[i].end<intervals[i+1].end) intervals[i].end=intervals[i+1].end;
intervals.erase(intervals.begin()+i+1);
i--;
}
}
return intervals;
}
void swap(vector<Interval> &vec,int i,int j){
Interval temp=vec[i];
vec[i]=vec[j];
vec[j]=temp;
}
};