zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    这些诗词你知道一句,却不知全诗!
    二十二、事件绑定及深入
    二十一、事件对象
    二十、事件入门
    十九、动态加载脚本和样式
    十八、DOM元素尺寸和位置
    十七、DOM操作表格及样式
    十六、DOM进阶
    十五、DOM基础
    正确使用volatile场景--状态标志
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7018892.html
Copyright © 2011-2022 走看看