• Insert Interval


    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,然后最后再插进去就行了。 因为顺序无所谓。

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *     int start;
     5  *     int end;
     6  *     Interval() { start = 0; end = 0; }
     7  *     Interval(int s, int e) { start = s; end = e; }
     8  * }
     9  */
    10 public class Solution {
    11     public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
    12         // Note: The Solution object is instantiated only once and is reused by each test case.
    13         ArrayList<Interval> results = new ArrayList<Interval>();
    14         boolean sig = false;
    15         for(int i = 0; i < intervals.size(); i ++)
    16         {
    17             if(intervals.get(i).end < newInterval.start)
    18             {
    19                 results.add(intervals.get(i));    
    20             }
    21             else
    22             {
    23                 newInterval.start = Math.min(newInterval.start, intervals.get(i).start);
    24             }
    25             if(intervals.get(i).start > newInterval.end)
    26             {
    27                 if(!sig)
    28                 {
    29                     results.add(newInterval);
    30                     sig = true;
    31                 }
    32                 results.add(intervals.get(i));
    33             }
    34             else
    35             {
    36                 newInterval.end = Math.max(newInterval.end, intervals.get(i).end);
    37             }
    38         }
    39         if(!sig)
    40         {
    41             results.add(newInterval);
    42         }
    43         return results;
    44     }
    45 }

    第二遍:

    不使用额外的存储空间:

     1 public class Solution {
     2     public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         if(intervals == null || intervals.size() == 0){
     5             ArrayList<Interval> result = new ArrayList<Interval>(newInterval);
     6             result.add(newInterval); 
     7             return result;
     8         }
     9         for(int i = 0; i < intervals.size(); i ++){
    10             if(i == 0)
    11         }
    12         intervals.get(0).start = intervals.get(0).start > newInterval.start ?  newInterval.start : intervals.get(0).start;
    13         pq.add(newInterval);
    14         result.add(pq.poll());//poll out the minimum element in the queue
    15         int max_end = result.get(0).end;
    16         while(pq.size() != 0){
    17             Interval tmp = pq.poll();
    18             if(tmp.start <= max_end){
    19                 max_end = max_end > tmp.end ? max_end : tmp.end;
    20                 result.get(result.size() - 1).end = max_end;
    21             }else{
    22                 result.add(tmp);
    23                 max_end = tmp.end;
    24             }
    25         }
    26         return result;
    27     }
    28 }
  • 相关阅读:
    学习笔记-php图像等比例剪裁-2016.4.7
    学习日记-2016.3.31
    学习日记--2016.3.30
    I/O扩展篇(基于74HC164/74HC165)
    Visual SVN Server启动失败0x8007042a错误
    CC3000 主机驱动API介绍
    CC3000 SPI接口编程介绍
    struct和typedef struct彻底明白了
    MSP430学习笔记:UART
    DWORD类型的IP地址转换为CString字符串
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3351229.html
Copyright © 2020-2023  润新知