【leetcode】Array—— Merge Intervals(56)
2016-03-05 10:21
344 查看
题目:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
思路:第一步排序,按照start排序;第二步,新建一个resultList,把第一个interval放入result,在读取第二个interval,该interval和result里面最后一个元素比较。排序的时候,使用的Collections.sort()以及Comparator。
排序的时间复杂度为O(n logn),第二步挨个判断intervals时间复杂度是O(n),所以,该算法整体的时间复杂度是O(n logn)
第一次尝试代码的时候,就是没有先做排序处理,导致wrong answer。
代码:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
[1,3],[2,6],[8,10],[15,18],
return
[1,6],[8,10],[15,18].
/** * 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; } * } */
思路:第一步排序,按照start排序;第二步,新建一个resultList,把第一个interval放入result,在读取第二个interval,该interval和result里面最后一个元素比较。排序的时候,使用的Collections.sort()以及Comparator。
排序的时间复杂度为O(n logn),第二步挨个判断intervals时间复杂度是O(n),所以,该算法整体的时间复杂度是O(n logn)
第一次尝试代码的时候,就是没有先做排序处理,导致wrong answer。
代码:
public List<Interval> merge(List<Interval> intervals) { if (intervals.size() <= 1) return intervals; // Sort by ascending starting point using an anonymous Comparator Collections.sort(intervals, new Comparator<Interval>() { @Override public int compare(Interval i1, Interval i2) { return Integer.compare(i1.start, i2.start); } }); List<Interval> result = new LinkedList<Interval>(); int start = intervals.get(0).start; int end = intervals.get(0).end; for (Interval interval : intervals) { if (interval.start <= end) // Overlapping intervals, move the end if needed end = Math.max(end, interval.end); else { // Disjoint intervals, add the previous one and reset bounds result.add(new Interval(start, end)); start = interval.start; end = interval.end; } } // Add the last interval result.add(new Interval(start, end)); return result; }
相关文章推荐
- Sphinx 配置文件说明
- 点击空白处使PopUpWindow消失
- 修改UISearchBar 背景
- codevs 1256 打鼹鼠 LIS
- Approx Analytic Arealight
- Http协议相关学习
- DataGridView选中整行
- 白话Spring(基础篇)---AOP(实例篇-2)
- 在网上看到的,加上自己学习到的,实践的,java中的内存优化问题
- FileUtils方法大全
- POJ 2253 Frogger(最小生成树)
- UIVIew相关知识
- uitextview 相关知识
- uicollectionview cell 行间距、列间距
- FMDB源码阅读
- Android5.0以来的新控件的使用
- 旋转数组中的最小数字
- C++编译器与链接器的工作原理
- static_cast与dynamic_cast转换
- android组合控件Titlebar的定制