博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合并区间(LintCode)
阅读量:4565 次
发布时间:2019-06-08

本文共 2138 字,大约阅读时间需要 7 分钟。

合并区间

给出若干闭合区间,合并所有重叠的部分。

样例

给出的区间列表 => 合并后的区间列表:

[                     [  [1, 3],               [1, 6],  [2, 6],      =>       [8, 10],  [8, 10],              [15, 18]  [15, 18]            ]]
挑战

O(n log n) 的时间和 O(1) 的额外空间。

 

思路是清晰的,代码是混乱的。先用Collection.sort()方法对List排序。当然也可以先toArray()然后用Arrays.sort()排序。但是都需要写一个实现Comparator接口的内部类。

1 /** 2  * Definition of Interval: 3  * public class Interval { 4  *     int start, end; 5  *     Interval(int start, int end) { 6  *         this.start = start; 7  *         this.end = end; 8  *     } 9  */10 11 class Solution {12     /**13      * @param intervals: Sorted interval list.14      * @return: A new sorted interval list.15      */16      17     public class IntervalCmp implements Comparator
{18 public int compare(Interval i1, Interval i2) {19 if (i1.start < i2.start) return -1;20 if (i1.start == i2.start && i1.end <= i2.end) return -1;21 return 1;22 }23 }24 public List
merge(List
intervals) {25 if(intervals.size() == 1)return intervals;26 List
list = new ArrayList
();27 int max1 = -1;28 int min1 = 99999999;29 int max = -1;30 int min = 99999999;31 32 //借助Collections。sort()排序,百度了一下JDK7不加上这句的话可能会报错33 System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");34 Collections.sort(intervals, new IntervalCmp());35 36 for(int i = 0;i
max1 || x.end < min1) {39 min = x.start;40 max = x.end;41 for(int j = i+1;j
= min && y.start <= max) {44 if(max < y.end) {45 max = y.end;46 }47 if(min > y.start) {48 min = y.start;49 }50 }51 }52 x.end = max;53 x.start = min;54 if(max1 < max) max1 = max;55 if(min1 > min) min1 = min;56 list.add(x);57 }58 }59 return list;60 }61 62 }
View Code

 

在说一下比较器抛

java.lang.IllegalArgumentException: Comparison method violates its general contract 

这个异常,JDK7以后用比较器在两个元素相等的情况下需要返回0。可参考:

转载于:https://www.cnblogs.com/FJH1994/p/5022466.html

你可能感兴趣的文章
UIImageView 一些属性设置
查看>>
C# winfrom 打印到Excel中
查看>>
Java中ThreadLocal类的作用以及实现原理
查看>>
mustache学习补遗
查看>>
MVC4 View 的呈现
查看>>
HTML5的自定义属性data-*详细介绍和JS操作实例
查看>>
LINQ:是BUG还是~~~
查看>>
python文件操作 seek(),tell()
查看>>
数据库优化方法
查看>>
联想梁军加盟乐视网任副总裁
查看>>
水平垂直居中
查看>>
十九、扩展 Extensions
查看>>
golang批量修改文件名
查看>>
【NOIP 模拟题】[山东多校联合模拟赛 day1 T1] 矩形计数(暴力)
查看>>
FACL 文件系统的权限设置
查看>>
C标准库的setlocale()用法笔记
查看>>
windows下php7.1安装redis扩展以及redis测试使用全过程
查看>>
MPP-使用说明
查看>>
4.7上午
查看>>
canvas绘制中的API
查看>>