• Merge Intervals


    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18].

    复用 Insert Interval代码即可。

     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> merge(ArrayList<Interval> intervals) {
    12         // Note: The Solution object is instantiated only once and is reused by each test case.
    13         ArrayList<Interval> results = new ArrayList<Interval>();
    14         if(intervals == null || intervals.size() == 0) return intervals;
    15         for(int i = 0; i < intervals.size(); i ++)
    16         {
    17             results = insert(results,intervals.get(i));
    18         }
    19         return results;
    20     }
    21 
    22     public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
    23         // Note: The Solution object is instantiated only once and is reused by each test case.
    24         ArrayList<Interval> results = new ArrayList<Interval>();
    25         boolean sig = false;
    26         for(int i = 0; i < intervals.size(); i ++)
    27         {
    28             if(intervals.get(i).start > newInterval.end)
    29             {
    30                 if(!sig)
    31                 {
    32                     results.add(newInterval);
    33                     sig = true;
    34                 }
    35                 results.add(intervals.get(i));
    36             }
    37             else
    38             {
    39                 newInterval.end = Math.max(newInterval.end, intervals.get(i).end);
    40             }
    41             if(intervals.get(i).end < newInterval.start)
    42             {
    43                 results.add(intervals.get(i));    
    44             }
    45             else
    46             {
    47                 newInterval.start = Math.min(newInterval.start, intervals.get(i).start);
    48             }
    49         }
    50          if(!sig)
    51         {
    52             results.add(newInterval);
    53         }
    54         return results;
    55     }
    56 }

     第二遍:

     1 public class Solution {
     2     public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
     3         // Note: The Solution object is instantiated only once and is reused by each test case.
     4         ArrayList<Interval> result = new ArrayList<Interval>();
     5         if(intervals == null || intervals.size() == 0)return result;
     6         PriorityQueue<Interval> pq = new PriorityQueue<Interval>(intervals.size(), new Comparator<Interval>(){
     7             public int compare(Interval a, Interval b){
     8                 return a.start > b.start ? 1 : (a.start == b.start ? 0 : -1);
     9             }
    10         });
    11         for(Interval interval:intervals){
    12               pq.add(interval);
    13         }
    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 }

    先把interval 按start time 排序,再添加。 保存当前的最大end time。

  • 相关阅读:
    [daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文
    [troubleshoot][daily][archlinux][pacman] pacman 与 pip 包文件冲突
    [daily] 宇宙终极shell之zsh
    [knowledge][basic][hardware] 内存的硬件结构(转)
    [troubleshoot][archlinux][X] GPU HANG
    [daily]使用rdtsc指令,测量程序的运行速度 [转]
    [have_fun] 好玩哒小游戏又来啦
    [dpdk] 读开发指南(2)(内容长期整理中)
    [Virtualization][SDN] 讲的很好的SDN软件定义网络视频课程
    [Virtualization][SDN] VXLAN到底是什么 [转]
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3351231.html
Copyright © 2020-2023  润新知