• 30 插入区间


    原题网址:http://www.lintcode.com/zh-cn/problem/insert-interval/#

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

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

    样例

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

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

    参考:

    https://blog.csdn.net/gao1440156051/article/details/51606213

    https://blog.csdn.net/linhuanmars/article/details/22238433

    基本思路就是先扫描走到新的interval应该插入的位置,接下来就是插入新的interval并检查后面是否冲突,有冲突就合并区间,一直到新的interval的end小于下一个interval的start,然后取新interval和当前interval中end大的即可。因为要进行一次线性扫描,所以时间复杂度是O(n)。而空间上如果我们重新创建一个ArrayList返回,那么就是O(n)。

     1 /**
     2  * Definition of Interval:
     3  * classs Interval {
     4  *     int start, end;
     5  *     Interval(int start, int end) {
     6  *         this->start = start;
     7  *         this->end = end;
     8  *     }
     9  * }
    10  */
    11 
    12 class Solution {
    13 public:
    14     /**
    15      * @param intervals: Sorted interval list.
    16      * @param newInterval: new interval.
    17      * @return: A new interval list.
    18      */
    19     vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
    20         // write your code here
    21         if (intervals.empty())
    22     {
    23         intervals.push_back(newInterval);
    24         return intervals;
    25     }
    26     vector<Interval> result;
    27     int size=intervals.size();
    28     int i=0;
    29     for (;i<size;i++)
    30     {
    31         if (newInterval.start>intervals[i].end)
    32         {
    33             result.push_back(intervals[i]);
    34         }
    35         else
    36         {
    37             break;
    38         }
    39     }
    40 
    41     if (i<size)
    42     {
    43         newInterval.start=min(newInterval.start,intervals[i].start);
    44     }
    45 
    46     for (;i<size;i++)
    47     {
    48         if (newInterval.end>=intervals[i].start)
    49         {
    50             newInterval.end=max(newInterval.end,intervals[i].end);
    51         }
    52         else
    53         {
    54             break;
    55         }
    56     }
    57 
    58     result.push_back(newInterval);
    59     for (;i<size;i++)
    60     {
    61         result.push_back(intervals[i]);
    62     }
    63 
    64     return result;
    65     }
    66 };

    其他参考:

    https://blog.csdn.net/ljq140421/article/details/77897487

    https://blog.csdn.net/linglian0522/article/details/70194598

  • 相关阅读:
    03server
    Storm介绍(一)
    storm总结
    Spring源码分析(七)扩展接口BeanPostProcessors源码分析
    技术大牛养成指南
    02装配bean
    02Activity
    maven构建项目
    IDEA使用
    从GIt上导出Maven项目
  • 原文地址:https://www.cnblogs.com/Tang-tangt/p/8706078.html
Copyright © 2020-2023  润新知