描述
合并两个已排序的间隔列表,并将其作为一个新的排序列表返回。新的排序列表应该通过拼接两个列表的间隔并按升序排序。
给定列表中的间隔一定不会重叠。
不同列表中的间隔可能会重叠。
您在真实的面试中是否遇到过这个题?
是
样例
给定 list1 = [(1,2),(3,4)]
和 list2 = [(2,3),(5,6)]
, 返回 [(1,4),(5,6)]
.
这道题和先前的第156道题差不多,每次都选择两个列表中第一个数start较小的那个添加到结果列表中。
/**
* Definition of Interval:
* classs Interval {
* int start, end;
* Interval(int start, int end) {
* this->start = start;
* this->end = end;
* }
* }
*/
class Solution {
public:
/**
* @param list1: one of the given list
* @param list2: another list
* @return: the new sorted list of interval
*/
void push(vector<Interval>&list,Interval &interval){
if(interval.start <= list.back().end)
list.back().end = max(interval.end,list.back().end);
else
list.push_back(interval);
}
vector<Interval> mergeTwoInterval(vector<Interval> &list1, vector<Interval> &list2) {
if(list1.size()==0)
return list2;
else if(list2.size() == 0)
return list1;
vector<Interval> list;
int i=0,j=0,StartPoint = min(list1[0].start,list2[0].start);
list.push_back(Interval(StartPoint,StartPoint));
while(i<list1.size() && j<list2.size()){
if(list1[i].start < list2[j].start )
push(list,list1[i++]);
else
push(list,list2[j++]);
}
while(i<list1.size())
push(list,list1[i++]);
while(j<list2.size())
push(list,list2[j++]);
return list;
}
};