LeetCode - Merge Intervals
来源:互联网 发布:淘宝店主电话采集器 编辑:程序博客网 时间:2024/05/29 12:21
https://leetcode.com/problems/merge-intervals/
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]
.
public class Solution { public List<Interval> merge(List<Interval> intervals) { List<Interval> rst = new LinkedList<Interval>(); for(int i=0; i<intervals.size(); i++){ insert(rst, intervals.get(i)); } return rst; } public List<Interval> insert(List<Interval> intervals, Interval newInterval) { int i = 0; while(i<intervals.size()){ if(newInterval.end < intervals.get(i).start) { intervals.add(i,newInterval); break; } else if(newInterval.start > intervals.get(i).end){ if(i==(intervals.size()-1)){ intervals.add(i+1, newInterval); break; } else{ i++; continue; } } else{ Interval tmp = intervals.remove(i); tmp.start = Math.min(tmp.start, newInterval.start); tmp.end = Math.max(tmp.end, newInterval.end); newInterval = tmp; } } if(i==intervals.size()) intervals.add(newInterval); return intervals; }}
但是这种方法时间复杂度是O(n^2),所以另一个方法是先给所有interval排序,再merge,这样merge过程只需要O(n)就行了,但排序需要O(n*lgn),所以总时间应该是O(n*lgn)。排序是用的重载Comparator函数。排序后就不需要重新定义一个List,直接在原来List基础上改就行了。代码如下:
public class Solution { public List<Interval> merge(List<Interval> intervals) { if(intervals.size()==0) return intervals; Collections.sort(intervals, new Comparator<Interval>(){ @Override public int compare(Interval o1, Interval o2){ return o1.start-o2.start; } }); int i = 0; while(i < (intervals.size()-1)){ Interval current = intervals.get(i); Interval next = intervals.get(i+1); if(next.start>current.end) i++; else{ intervals.remove(i+1); current.start = Math.min(current.start, next.start); current.end = Math.max(current.end, next.end); } } return intervals; }}
注意这里sort的一个参数是Comparator类的对象,并且在块内直接初始化了这个Comparator类,重载了这个类的compare函数。这部分的代码很不熟,要多写几遍。
0 0
- LeetCode: Merge Intervals
- LeetCode Merge Intervals
- LeetCode: Merge Intervals
- [Leetcode] Merge Intervals
- leetcode 28: Merge Intervals
- Leetcode: Merge Intervals
- [LeetCode] Merge Intervals
- [LeetCode]Merge Intervals
- leetcode merge intervals
- [leetcode]Merge Intervals
- LeetCode-Merge Intervals
- [leetcode] Merge Intervals
- LeetCode - Merge Intervals
- 【leetcode】Merge Intervals
- leetcode Merge Intervals
- LeetCode Merge Intervals
- [LeetCode] Merge Intervals
- LeetCode | Merge Intervals
- flex 面试题
- J-LINK RTT的实现 用RTT代替串口printf输出调试程序
- Html <base target="_self">及checkbox问题
- leetcode:Reverse Words in a String
- Thread通讯基础
- LeetCode - Merge Intervals
- android开发常用的网站
- 日拱一卒(二十)
- Xcode6.2自定义代码块位置
- C# MVC 设置起始页
- django项目小结(1)
- 【酱油鸡】论渣渣如何在雅礼被虐
- java中的事件监听是怎样实现的
- 程序员的职业方向: 是-->技术?还是-->管理?