描述
給出若干閉合區間,合併所有重疊的部分。
您在真實的面試中是否遇到過這個題? 是
樣例
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;
}
};