zoukankan      html  css  js  c++  java
  • 56.Merge Intervals---贪心---《编程之美》2.19区间重合判断

    题目链接:https://leetcode.com/problems/merge-intervals/description/

    题目大意:给出一串list,里面装interval类,这个类里有start和end两个属性,表示起始点和结束点,如果前面interval的结束点>后面interval的起始点,则合并两个interval,起始点是较小者,结束点是较大者。例子如下:

    法一(借鉴):先排序后求解。这里用到了java自定义类的排序 。只是排序时是按照start排序,而不是按照end排序,当start小的排在前面的时候,只需要比较end即可,否则按end排序的话,start小的如果在后面还是会出现问题,而又不能只比较start,所以很容易漏测试用例。思想:按start升序排列,如果end<start,则直接add;否则,更改当前end为max(当前end,新end)。代码如下(耗时26ms):

     1     //自定义排序,按照start升序
     2     class sortStart implements Comparator<Interval> {
     3         public int compare(Interval i1, Interval i2) {
     4             return i1.start - i2.start;
     5         }
     6     }
     7     public List<Interval> merge(List<Interval> intervals) {
     8         Collections.sort(intervals, new sortStart());
     9         LinkedList<Interval> res = new LinkedList<Interval>();
    10         for(Interval interval : intervals) {
    11             //如果未重叠,则直接add
    12             if(res.isEmpty() || res.getLast().end < interval.start) {
    13                 res.add(interval);
    14             }
    15             //如果重叠,则更新end,因为已经按start排好序,所以只更新end即可,不用更新start
    16             else {
    17                 res.getLast().end = Math.max(res.getLast().end, interval.end);
    18             }
    19         }
    20         return res;
    21     }
    View Code
  • 相关阅读:
    Tomcat容器,Servlet容器,Spring容器的包含关系
    数据库字段类型导致的前端JSON转换错误
    全局变量和局部变量
    数据库中的timestamp类型数据的存储
    layer的confirm
    网间互联协议
    局域网协议
    局域网络设备
    网络传输介质
    Docker常用命令
  • 原文地址:https://www.cnblogs.com/cing/p/8512629.html
Copyright © 2011-2022 走看看