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

    思路

    先按照Interval.start进行升序排列,如果前一个front,后一个behind。如果behind.end < front.start不用管,behind.end >= front.end 删除front。behind.end > front.start && behind.end < front.end合并

     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         Collections.sort(intervals, new Compare());
    13         boolean isMerge = false;
    14         while(true){
    15             isMerge = false;
    16             for(int i = 0; i < intervals.size() - 1; i++){
    17                 Interval behind = intervals.get(i);
    18                 Interval front    = intervals.get(i + 1);
    19                 if(behind.end < front.start)                                    //后面一个end小于前面的start
    20                     continue;
    21                 else if(behind.end >= front.end)                                //后面一个end大于等于前面的end
    22                 {
    23                     intervals.remove(i + 1);
    24                     isMerge = true;
    25                 }
    26                 else if(behind.end < front.end && behind.end >= front.start){    //后面的end在前面的start和end中间,合并
    27                     behind.end = front.end;
    28                     intervals.remove(i + 1);
    29                     isMerge = true;
    30                 }//else if
    31             }//for
    32             if(!isMerge)
    33                 break;
    34         }
    35         
    36         return intervals;
    37     }
    38 
    39 }
    40 class Compare implements Comparator<Interval>{
    41 
    42     @Override
    43     public int compare(Interval o1, Interval o2) {
    44         if(o1.start < o2.start)
    45             return -1;
    46         else if(o1.start > o2.start)
    47             return 1;
    48         else
    49             return 0;
    50     }
    51 }
  • 相关阅读:
    (杭电 1014)Uniform Generator
    错排公式浅谈(推导+应用)
    (杭电 2045)不容易系列之(3)—— LELE的RPG难题
    (杭电 2046)骨牌铺方格
    (补题 杭电 2044)一只小蜜蜂...
    (杭电 1097)A hard puzzle
    Linux内核实验作业六
    《Linux内核设计与实现》第十八章读书笔记
    实验作业:使gdb跟踪分析一个系统调用内核函数
    k8s标签
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4254989.html
Copyright © 2011-2022 走看看