lintcode-30-插入区间

本文介绍了一种区间合并算法,该算法可以在一个已排序的区间列表中插入新的区间,并确保列表保持有序且区间间不重叠。通过示例展示了插入不同区间后的结果变化。

插入区间

给出一个 无重叠 的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且 不重叠 (如果有必要的话,可以合并区间)。

样例

插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。
插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。

标签

领英 基本实现 谷歌

code
/**
 * Definition of Interval:
 * class Interval {
 * public:
 *     int start, end;
 *     Interval(int start, int end) {
 *         this->start = start;
 *         this->end = end;
 *     }
 * }
 */
class Solution {
public:
    /**
     * Insert newInterval into intervals.
     * @param intervals: Sorted interval list.
     * @param newInterval: new interval.
     * @return: A new interval list.
     */
    vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
        // write your code here
        int i = 0, size = intervals.size();

        if(size == 0) {  
            intervals.push_back(newInterval);
            return intervals;
        }
                  
        while(i<size && compareInterval(newInterval, intervals[i])) {
            ++i;
        }

        intervals.insert(intervals.begin()+i, newInterval);
        size = intervals.size();
        for(i=0; i<size-1; i++) {
            // intervals[i+1] 属于 intervals[i],檫除intervals[i+1]
            if(intervals[i+1].start >= intervals[i].start && intervals[i+1].end <= intervals[i].end) {
                intervals.erase(intervals.begin()+i+1);
                size--;
                i--;
            }
            // intervals[i+1] 与 intervals[i]合并
            else if(intervals[i+1].start <= intervals[i].end){  
                intervals[i].end = intervals[i+1].end;  
                intervals.erase(intervals.begin()+i+1);  
                size--;  
                i--;  
            }
        }  
        return intervals;  
    }
    
    // @return 1:a>b
    // @return 0:a<=b
    bool compareInterval(Interval &a, Interval &b){  
        if(a.start == b.start) { 
            return a.end > b.end;
        }
        return a.start > b.start;
    }
};

转载于:https://www.cnblogs.com/libaoquan/p/7018892.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值