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

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

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].复制代码

示例 2:

输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。复制代码

解题思路: 将输入转为数组 , 然后定制比较函数对数组进行排序 , 用两个变量start , end记录当前遍历的区间 , 然后对数组进行遍历 , 如果end 大于等于 当前遍历值的start , 则进行归并 , 否则将start , end加入结果集, 并更新start 、end ; 小坑: 最后还要往结果集加入一次start 、end

/** * Definition for an interval. * public class Interval { *     int start; *     int end; *     Interval() { start = 0; end = 0; } *     Interval(int s, int e) { start = s; end = e; } * } */class Solution {    public List
merge(List
intervals) { List< Interval > res = new ArrayList<>(); if( intervals == null || intervals.size() == 0 ) { return res; } Interval[] in = new Interval[ intervals.size() ]; intervals.toArray( in ); Arrays.sort( in , new Comparator
(){ @Override public int compare( Interval o1 , Interval o2 ){ if( o1.start == o2.start ){ return o1.end - o2.end; } return o1.start - o2.start; } }); int start = in[ 0 ].start; int end = in[ 0 ].end; for( int i = 1; i < intervals.size() ; i++ ){ if( end >= in[ i ].start ){ end = end > in[ i ].end ? end : in[ i ].end ; continue; } Interval tmp = new Interval( start , end ); res.add( tmp ); start = in[ i ].start; end = in[ i ].end; } Interval tmp = new Interval( start , end ); res.add( tmp ); return res; }}复制代码

转载地址:http://yfrql.baihongyu.com/

你可能感兴趣的文章
scrapy的selectors
查看>>
launcher 图标删除分析
查看>>
UILabel里字体带下划线2
查看>>
loadrunner字符串处理函数
查看>>
20165320 第四周课下补做
查看>>
布局文件中fill_parent和match_parent有什么区别?
查看>>
HTTP报文内的HTTP信息
查看>>
sublime使用技巧(1)-- 下载与插件安装
查看>>
linux 自定义快捷命令
查看>>
学习Spark——环境搭建(Mac版)
查看>>
tsung的压力测试
查看>>
Linux常用命令之文件搜索命令
查看>>
H5移动前端开发常用高能css3汇总
查看>>
bzoj1618[Usaco2008 Nov]Buying Hay 购买干草*
查看>>
【原】无脑操作:Eclipse + Maven + jFinal + MariaDB 环境搭建
查看>>
快速幂
查看>>
再谈javascript函数节流
查看>>
周掌柜
查看>>
分布式事务
查看>>
突发奇想
查看>>