LeetCode_OJ【56】Merge Intervals
来源:互联网 发布:剑灵ol mac 编辑:程序博客网 时间:2024/05/13 22:24
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]
.
这道题最好在57题做完了之后再做,leetcode上的这个顺序正好反过来了。
一开始直接上手这个题目的思路如下: 先对list中的所有interval按照start升序,end升序进行排序,排序可以借助Collections.sort()函数进行;然后将list中的每个interval的end属性和该interval后面的interval的start属性比较,如果前面interval的end大于后面的interval的start,则将后面的interval删去,前面的interval的end值取这两个interval的end值中的较大的那一个。
public List<Interval> merge(List<Interval> intervals) { Collections.sort(intervals, new Comparator<Interval>(){ public int compare(Interval a,Interval b){ return a.start == b.start ? a.end - b.end : a.start - b.start; } } ); for(ListIterator<Interval> it = intervals.listIterator() ; it.hasNext(); ){ Interval pre = it.next(); if(it.hasNext()){ Interval p = it.next(); if(pre.end >= p.start){ pre.end = Math.max(pre.end,p.end); it.remove(); } it.previous(); } } return intervals; }
这个方法比较好想,时间复杂度为O(nlogn),但是跑完所有的用力花了34ms,表现相当一般。
这个题目可以和57题目的方法结合起来使用,声明一个空的list,然后用57题的insert方法将intervals里面所有的interval都插入到list中。
public class Solution { public List<Interval> merge(List<Interval> intervals) {List<Interval> res = new ArrayList<Interval>();for(Interval interval : intervals){insert(res,interval);}return res;}public List<Interval> insert(List<Interval> intervals, Interval newInterval) {if(intervals.size() == 0){ intervals.add(newInterval); return intervals; }ListIterator<Interval> it = intervals.listIterator();while(it.hasNext()){Interval tmp = it.next();if(tmp.start > newInterval.end){it.previous();it.add(newInterval);return intervals;}else if(tmp.end < newInterval.start)continue;else {newInterval.start = Math.min(newInterval.start, tmp.start);newInterval.end = Math.max(newInterval.end, tmp.end);it.remove();} }it.add(newInterval); return intervals; }}
0 0
- LeetCode_OJ【56】Merge Intervals
- [leetcode 56] Merge Intervals
- 56 Merge Intervals
- [LeetCode 56]Merge Intervals
- leetcode || 56、 Merge Intervals
- LeetCode 56:Merge Intervals
- leetcode 56: Merge Intervals
- 56 Merge Intervals
- 56Merge Intervals
- leetcode 56:Merge Intervals
- 56 - Merge Intervals
- LeetCode 56 - Merge Intervals
- Leetcode 56 Merge Intervals
- LeetCode 56 Merge Intervals
- LeetCode #56: Merge Intervals
- Leetcode 56 Merge Intervals
- LeetCode 56 Merge Intervals
- 56 Merge Intervals
- AndroidStudioTutorial_160219S005_Fragment通信
- Android 自定义字体方案
- "".equals(str)与str.equals("")的区别
- 基于数组的最大优先队列
- 使用Android Studio,新建library并发布到jCenter
- LeetCode_OJ【56】Merge Intervals
- Ubuntu中MySQL数据库安装
- 传感器系列2--温度传感器之DS18B20(2)
- leetcode刷题系列C++-3Sum Closest
- Python matplotlib高级绘图详解
- linux新加动态库后,使用中遇到的找不到的问题以及ldconfig讲解
- eclipse中文大小设置
- xcode提示App Transport Security has blocked a cleartext HTTP (http://) resource load的解决办法
- YVU420PackedSemiPlanar32m4ka与YUV420PackedSemiPlanar64x32Tile2m8ka