zoukankan      html  css  js  c++  java
  • Insert Interval

    题目:给出一些非重叠区间,插入一个新区间

    [1,3],[6,9], 插入 [2,5] 结果为 [1,5],[6,9].

    [1,2],[3,5],[6,7],[8,10],[12,16], 插入 [4,9] 结果为 [1,2],[3,10],[12,16].

    思路:大致三种情况


    主要注意区间范围的限制。


    首先考虑两级情况,要么在最左边,要么在最右边。这种情况最简单,直接插入。

    接下来就是难点,注意情况newInterval.start > intervals[i].end,是在区间进行比较。

    相反newInterval.end < intervals[j].start,这是在区间左边进行比较。

    也就是这个时候得出i和j,分别从左边右边得出结论。

    这个时候继续判断i和j,只有两种情况。j<i以及j>=i。这个时候还得小心,究竟新区间与原来区间有没有重叠,这也是j<i的情况,剩下的很简单。


    代码

    class Solution {
    public:
        vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
            vector<Interval> result;
            
            const int n = intervals.size();
            if (n == 0) {
                result.push_back(newInterval);
                return result;
            }
            if (newInterval.start > intervals[n-1].end) {
                result = intervals;
                result.push_back(newInterval);
                return result;
            }
            if (newInterval.end < intervals[0].start) {
                result.push_back(newInterval);
                result.insert(result.end(), intervals.begin(), intervals.end());
                return result;
            }
            
            int i = 0;
            while (newInterval.start > intervals[i].end) {
                result.push_back(intervals[i++]);
            }
            
            int j = n - 1;
            while (newInterval.end < intervals[j].start) {
                j--;
            }
            
            if (j < i) {
                result.push_back(newInterval);
            }
            else {
                newInterval.start = min(newInterval.start, intervals[i].start);
                newInterval.end = max(newInterval.end, intervals[j].end);
                result.push_back(newInterval);
            }
    
            result.insert(result.end(), intervals.begin()+j+1, intervals.end());
            
            return result;
        }
    };


  • 相关阅读:
    shl and shr
    清空和填充內存
    php 中instanceof的使用
    HTTP错误代码大全
    临时关闭Mysql ONLY_FULL_GROUP_BY
    php 中instanceof的使用
    Laravel Eloquent ORM 时如何查询表中指定的字段
    vagrant在windows下的使用
    下载配置python tornado web window7 开发笔记1:环境搭建
    运行确认怎么用vnc访问自己电脑,并且同时又是同一个会话?
  • 原文地址:https://www.cnblogs.com/jsrgfjz/p/8519915.html
Copyright © 2011-2022 走看看