码迷,mamicode.com
首页 > 其他好文 > 详细

LintCode 30. 插入区间

时间:2018-01-27 00:39:56      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:back   efi   style   for   val   int start   范围   public   一个   

题目:

给出一个无重叠的按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

 

样例

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

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

 

解:

分三种情况:

第一个if:插入的end比原区间的第i个元素的start小(即自己最大的比人家最小的还要小,就放到人家前面),例: 插入区间[2,5]到[[6,7]] 当前 i 是指向[6,7],因为5比6要小,即将[2,5]插入到[6,7]前---》[[2,5],[6,7]]

第二个if:插入的start比原区间的第i个元素的end大(自己最小的也比人家最大的大,放在人家后面),例:插入区间[2,5]到[[0,1]] 当前i 指向[0,1],2比1大,即将[2,5]插入到[0,1]后--》[[0,1],[2,5]]

第三个if:其他情况,取最大的区间范围,最小的start为插入区间的start,最大的end为插入区间的end,便可符合以上两个if其中一种。

/**
 * Definition of Interval:
 * class Interval {
 * public:
 *     int start, end;
 *     Interval(int start, int end) {
 *         this->start = start;
 *         this->end = end;
 *     }
 * }
 */


class Solution {
public:
    /*
     * @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
        vector<Interval> res;
        if(intervals.size()==0){
            res.push_back(newInterval);
            return res;
        }

        int sz=intervals.size();
        for(int i=0;i<sz;i++)
        {
            Interval in=intervals[i];
            if(newInterval.end<in.start)
            {
                res.push_back(newInterval);  
                res.insert(res.end(),intervals.begin()+i,intervals.end());  
                return res;  
            }
            else if(in.end<newInterval.start)
            {
                res.push_back(in);
            }
            else
            {
                newInterval.start = min(newInterval.start, in.start);    
                newInterval.end = max(newInterval.end, in.end);   
            }
        }
        
        res.push_back(newInterval);
        return res;
    }
};

 

LintCode 30. 插入区间

标签:back   efi   style   for   val   int start   范围   public   一个   

原文地址:https://www.cnblogs.com/zslhg903/p/8361961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!