zoukankan      html  css  js  c++  java
  • Leetcode-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].

    Anaylsis:

    Method 1: Sort the start points and end points respectively. For the ith point, if the (i-1)th end point is smaller than the ith start point, then the previous i-1 intervals are merged to one interval.

    Method 2: Count the delta value at each time point. start: +1, end:-1. Then starting from the first time point, if the accumulative value reaches 0, then we get one interval.

    Solution 1

     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 List<Interval> merge(List<Interval> intervals) {
    12         List<Interval> res = new ArrayList<Interval>();
    13         if (intervals.size()==0) return res;
    14         if (intervals.size()==1){
    15             res.add(intervals.get(0));
    16             return res;
    17         }
    18         
    19         
    20         List<Integer> sList = new ArrayList<Integer>();
    21         List<Integer> eList = new ArrayList<Integer>();
    22         for (int i=0;i<intervals.size();i++){
    23             sList.add(intervals.get(i).start);
    24             eList.add(intervals.get(i).end);
    25         }
    26         Collections.sort(sList);
    27         Collections.sort(eList);
    28         
    29         int p1=0;
    30         while (p1<sList.size()){
    31             int p2 = p1+1;
    32             while (p2<sList.size() && sList.get(p2)<=eList.get(p2-1)) p2++;
    33             Interval inter = new Interval(sList.get(p1),eList.get(p2-1));
    34             res.add(inter);
    35             p1 = p2;
    36         }
    37         
    38         return res;
    39     }
    40 }

    Solution 2:

     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 List<Interval> merge(List<Interval> intervals) {
    12         Map<Integer,Integer> pMap = new HashMap<Integer,Integer>();
    13         List<Integer> pList = new ArrayList<Integer>();
    14 
    15         //Count the delta at each point.
    16         for (int i=0;i<intervals.size();i++){
    17             Interval cur = intervals.get(i);
    18             if (pMap.containsKey(cur.start)){
    19                 pMap.put(cur.start,pMap.get(cur.start)+1);
    20             } else {
    21                 pList.add(cur.start);
    22                 pMap.put(cur.start,1);
    23             }
    24             if (pMap.containsKey(cur.end)){
    25                 pMap.put(cur.end,pMap.get(cur.end)-1);
    26             } else {
    27                 pList.add(cur.end);
    28                 pMap.put(cur.end,-1);
    29             }
    30             }
    31         
    32         //Now, sort the time points.
    33         Collections.sort(pList);
    34         
    35         //Now construct new interval list.
    36         List<Interval> res = new ArrayList<Interval>();
    37         int index1 = 0;
    38         while (index1<pList.size()){
    39             int val = pMap.get(pList.get(index1));
    40             int index2 = index1;
    41             while (val!=0){
    42                 index2++;
    43                 val += pMap.get(pList.get(index2));
    44             }
    45             Interval one = new Interval(pList.get(index1),pList.get(index2));
    46             res.add(one);
    47             index1 = index2+1;            
    48         }
    49         return res;
    50     }
    51 }

    The most important thing here is to consider that the intervals are not sorted!.

  • 相关阅读:
    Notes 20180508 : Java基本程序设计结构之关键字与标识符
    Notes 20180507 : Java程序设计之环境搭建与HelloWord
    Notes 20180506 : Java程序设计语言概述
    Knowledge Point 20180506 深究Java的跨平台特性
    Notes 20180505 : 计算机的基础知识
    Notes 20180310 : String第二讲_String的声明与创建
    Notes 20180309 : String第一讲_char的可读序列
    chrome 調試 node 代碼
    mongoose 5.0 链接数据库 代码保存
    koa-compose 类库学习
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4096736.html
Copyright © 2011-2022 走看看