描述
给出若干闭合区间,合并所有重叠的部分。
您在真实的面试中是否遇到过这个题? 是
样例
Given intervals => merged intervals:
[ [
(1, 3), (1, 6),
(2, 6), => (8, 10),
(8, 10), (15, 18)
(15, 18) ]
]
挑战
O(n log n) 的时间和 O(1) 的额外空间。
分析:
这道和之前那道 Insert Interval 插入区间 很类似,这次题目要求我们合并区间,之前那题明确了输入区间集是有序的,而这题没有,所以我们首先要做的就是给区间集排序,由于我们要排序的是个结构体,所以我们要定义自己的comp,才能用sort来排序
排序之后,就可以按照 Insert Interval 插入区间的思路解题,但需要在原数组上操作
代码如下:
/**
* 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 comp(const Interval &a, const Interval &b)
{
return (a.start < b.start);
}
vector<Interval> merge(vector<Interval> &intervals) {
// write your code here
sort(intervals.begin(),intervals.end(),comp);
int cur=1;
while(cur<intervals.size())
{
if(intervals[cur-1].end<intervals[cur].start)
{ cur++;
continue;
}
if(intervals[cur-1].start<=intervals[cur].end)
{
intervals[cur].start=min(intervals[cur-1].start,intervals[cur].start);
intervals[cur].end=max(intervals[cur-1].end,intervals[cur].end);
intervals.erase(intervals.begin()+cur-1);
}
}
return intervals;
}
};