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

本文共 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

你可能感兴趣的文章
hikariconfig mysql_HikariConfig配置解析
查看>>
mysql批量数据多次查询数据库_mysql数据库批量操作
查看>>
jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法
查看>>
JDBC_MySQL_jdbc连接mysql_MySQL
查看>>
mysql cte的好处_Mysql 8 重要新特性 - CTE 通用表表达式
查看>>
zcu106 固化_xilinx zcu106 vcu demo
查看>>
java ftpclient 代码_java后台代码ftpclient下载文件
查看>>
java数据库生成model_继承BaseModelGenerator 生成Model时添加数据库表字段 生成代码示例...
查看>>
java面向对象的概念_java面向对象(上)-- 面向对象的概念
查看>>
java内部类访问外部类变量 final_Java内部类引用外部类中的局部变量为什么必须是final问题解析...
查看>>
java 栈帧与类的关系_深入理解Java虚拟机之类运行时栈帧结构
查看>>
php中删除评论怎么做的,详解PHP如何实现评论回复删除功能
查看>>
macports 安装php,「macports」MacOS 中 MacPorts 安装和使用 - 金橙教程网
查看>>
php 审计 for linux,for linux是什么意思
查看>>
matlab里面连接器是什么,Oops - an error has occurred
查看>>
matlab建立桌面图标,在ubuntu16.04上创建matlab的快捷方式(实现方法)
查看>>
smarty使用php代码,笑谈配置,使用Smarty技术_php
查看>>
oracle数据实际值限制,c# – Oracle数据库TNS密钥“数据源”的值长度超过了’128’的限制...
查看>>
silk v3 decoder php,解码转换QQ微信的SILK v3编码音频为MP3或其他格式
查看>>
linux不能访问80端口,lunux开放80端口(本地访问不了linux文件可能是这个原因)...
查看>>