839. 合并两个排序的间隔列表

描述

合并两个已排序的间隔列表,并将其作为一个新的排序列表返回。新的排序列表应该通过拼接两个列表的间隔并按升序排序。

给定列表中的间隔一定不会重叠。
不同列表中的间隔可能会重叠。

您在真实的面试中是否遇到过这个题?   是

样例

给定 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;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值