zoukankan      html  css  js  c++  java
  • 57. Insert Interval

    • Total Accepted: 83528
    • Total Submissions: 314574
    • Difficulty: Hard
    • Contributors: Admin

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

    You may assume that the intervals were initially sorted according to their start times.

    Example 1:
    Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

    Example 2:
    Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

    This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

    分析


    把插入newInterval看成如下形式,想象成把一个长方形的容器倒盖在现有的排好顺序的容器上
      |~~~~~~~~~~~~~~~~~~~~~~|       newInterval
    |____| |__| |________|  |______| intervals

    先确定newInterval的 start 在哪个位置,假设当前指向的intervals[i] 叫做 curi
    如果newInterval.end > curi.end
    那么将该curi 压入结果 result,并继续对下一个interval进行判断(可能会出现newInterval超出边界的情况,则直接压入结果result的最末端)

    否则:
    1 在curi的内部,即满足 newInterval.start >= curi.start 
         |~~~~~~~~~~~~~~......... newInterval 
    ...|____| |__| |_______...... intervals
    2 在curi的前面的空隙,即满足 newInterval.start < curi.start
          |~~~~~~~~~~~~~~~~~~......... newInterval 
    ..._|   |____| |__| |_______...... intervals
    确定新interval,即newi的start,只需要取 curi.start 和 newInterval.start的最小值就行

    先给newi的end赋值 newInterval.end,然后不断跳过那些在 newInterval.end 范围内的 intervals[i], 直到curi.end >= newInterval.end,如下图所示两种情况:
    .....~~~~~~~~~~~~~~~~~~~~|       newInterval
    ..|____| |__| |________|  |______| intervals
                                curi

    .....~~~~~~~~~~~~~~~~~~~~~~~~~|    newInterval
    ..|____| |__| |________|  |______| intervals
                                curi
    分别对这两种情况确定 newi.end

    最后将剩余的intervals[i] 压入结果result

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /**
     * Definition for an interval.
     * struct Interval {
     *     int start;
     *     int end;
     *     Interval() : start(0), end(0) {}
     *     Interval(int s, int e) : start(s), end(e) {}
     * };
     */
    class Solution {
    public:
        vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
            vector<Interval> result;
            int i;
            for(i = 0; i < intervals.size(); ++i){
                if(intervals[i].end < newInterval.start){
                    result.push_back(intervals[i]);
                }
                else{
                    break;
                }
            }
            // new interval is out of the max range
            if(i == intervals.size()){
                result.push_back(newInterval);
                return result;
            }
             
            Interval newi(min(intervals[i].start, newInterval.start), newInterval.end);
            for(; i < intervals.size(); ++i){
                Interval curi = intervals[i];
                if(curi.end < newi.end){
                    continue;
                }
                else{
                    // newi end is int the range of curi
                    if(newi.end >= curi.start){
                        newi.end = curi.end;
                        ++i; break;
                    }
                    //newi end is before the rnage of curi
                    else{
                        break;
                    }
                }
            }
            result.push_back(newi);
             
            for(;i < intervals.size(); ++i){
                result.push_back(intervals[i]);
            }
            return result;
        }
    };




  • 相关阅读:
    tomcat快速部署脚本
    Centos7下搭建单节点Zookeeper
    request的基本使用用法
    Centos7 下配置jdk
    oracle备份脚本(以日期命名文件夹)
    Centos7 关闭防火墙
    Centos7 配置静态ip地址
    杀死占用8080端口的进程
    git clone的时候遇到“Please make sure you have the correct access rights and the repository exists”
    【笔记】关于多分类问题中的混淆矩阵,精准率
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/1dcd6f5a12cb83bfed1e38c003b0bc75.html
Copyright © 2011-2022 走看看