lintCode-给出若干闭合区间,合并所有重叠的部分。
2015-08-29 19:30
453 查看
给出若干闭合区间,合并所有重叠的部分。
您在真实的面试中是否遇到过这个题? Yes
样例
给出的区间列表 => 合并后的区间列表:
[ [
[1, 3], [1, 6],
[2, 6], => [8, 10],
[8, 10], [15, 18]
[15, 18] ]
]
挑战
O(n log n) 的时间和 O(1) 的额外空间。
标签 Expand
相关题目 Expand
您在真实的面试中是否遇到过这个题? Yes
样例
给出的区间列表 => 合并后的区间列表:
[ [
[1, 3], [1, 6],
[2, 6], => [8, 10],
[8, 10], [15, 18]
[15, 18] ]
]
挑战
O(n log n) 的时间和 O(1) 的额外空间。
标签 Expand
相关题目 Expand
/* * Question:给出若干闭合区间,合并所有重叠的部分。 * * Solution:首先需要依赖链表每个节点的start进行排序,避免出现[2,3][3,6][5,9][1,10]这样的情况出现 * 排序之后只需扫描一遍数据,让每个数据与上一个进行比较 * 排序的复杂度为nlogn,比较的复杂度为n */ public static List<Interval> merge(List<Interval> intervals) { if(intervals.size() < 2) { return intervals; } List<Interval> result = new ArrayList<Interval>(); Interval l1,l2; Collections.sort(intervals, new Comparator<Interval>() { @Override public int compare(Interval o1, Interval o2) { return o1.start - o2.start; } }); l1 = intervals.get(0); for(int i = 0 ; i < intervals.size() ; i++) { if(i+1 == intervals.size()) { result.add(l1); break; } else { l2 = intervals.get(i+1); } if(l1.end >= l2.start) { l1.end = Math.max(l1.end, l2.end); } else { result.add(l1); l1 = l2; } } return result; }
相关文章推荐
- 用VBScript写合并文本文件的脚本
- oracle列合并的实现方法
- 使用BAT一句话命令实现快速合并JS、CSS
- SQL 合并多行记录的方法总汇
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- C#自适应合并文件的方法
- C#常见算法面试题小结
- GridView单元格合并
- 如何合并多个 .NET 程序集
- 使用UglifyJS合并/压缩JavaScript的方法
- 高性能WEB开发 JS、CSS的合并、压缩、缓存管理
- 多个js与css文件的合并方法详细说明
- 使用不同的方法结合/合并两个JS数组
- php 面试碰到过的问题 在此做下记录
- asp.net 面试+笔试题目第1/2页
- 合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
- 用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
- oracle实现多行合并的方法
- php分割合并两个字符串的函数实例
- PHP合并静态文件详解