• 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
  • 相关阅读:
    25 Groovy 相关资料
    24 使用Maven 或 Gradle构建groovy
    UVA
    UVA
    UVA
    UVA
    UVA
    【JZOJ4235】序列【数论,数学】
    【JZOJ4235】序列【数论,数学】
    【JZOJ5230】队伍统计【状压DP】
  • 原文地址:https://www.cnblogs.com/cing/p/8512629.html
Copyright © 2020-2023  润新知