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 }
  • 相关阅读:
    ECMall模板开发文档
    ECmall错误:Call to a member function get_users_count() on a non-object
    剖析ECMALL的登录机制
    分析ECMall的注册与登录机制
    ECMall的MySQL数据调用的简单方法
    ECMall系统请求跳转分析
    Ecmall系统自带的分页功能
    ECMall注册机制简要分析
    [Ecmall]ECMALL目录结构设置与数据库表
    [ecmall]Ecmall 后台添加模板编辑区
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4254989.html
Copyright © 2011-2022 走看看