56. Merge Intervals
来源:互联网 发布:c语言必读书籍 编辑:程序博客网 时间:2024/05/18 12:42
题目摘要
给定一组区间集合,返回合并后的区间。
例如,
给定[1,3],[2,6],[8,10],[15,18]
,
返回[1,6],[8,10],[15,18]
.
解法
1. 将给定列表按区间开头进行排序(可以用匿名内部类new Comparator实现继承Comparator的效果),然后根据区间结尾的情况合并
2. 把区间开头和结尾分别存到一个数组里,分别排序,然后合并区间(这一步步骤和第一个方法后面步骤一样)<快得多>
注意
1. 用匿名内部类实现和继承Comparator接口一样的效果
2. 方法二的原理:先看前两个区间,再把前两个区间看作整体,看它和第三个区间
可问问题
原题
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]
.
Solution#1
public List<Interval> merge(List<Interval> intervals) { if (intervals == null || intervals.isEmpty()) return intervals; Collections.sort(intervals, new Comparator<Interval>() { public int compare(Interval i1, Interval i2) { if (i1.start != i2.start) { return i1.start - i2.start; } return i1.end - i2.end; } }); ListIterator<Interval> it = intervals.listIterator(); Interval cur = it.next(); while (it.hasNext()) { Interval next = it.next(); if (cur.end < next.start) { cur = next; continue; } else { cur.end = Math.max(cur.end, next.end); it.remove(); } } return intervals;}
Solution#2
/** * 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; } * } */public class Solution { public List<Interval> merge(List<Interval> intervals) { if (intervals == null || intervals.size() <=1) return intervals; int n = intervals.size(); int[] beginArr = new int[n]; int[] endArr = new int[n]; for (int i = 0; i < n; i++) { beginArr[i] = intervals.get(i).start; endArr[i] = intervals.get(i).end; } Arrays.sort(beginArr); Arrays.sort(endArr); int begin = beginArr[0]; int end = endArr[0]; List<Interval> result = new LinkedList<Interval>(); for (int i = 1; i < n; i++) { if (beginArr[i] <= endArr[i - 1]) { end = endArr[i]; } else { result.add(new Interval(begin, end)); begin = beginArr[i]; end = endArr[i]; } } result.add(new Interval(begin, end)); return result; }}
0 0
- [LeetCode]56.Merge Intervals
- 56. Merge Intervals Leetcode
- LeetCode --- 56. Merge Intervals
- LeetCode 56.Merge Intervals
- [Leetcode] 56. Merge Intervals
- [leetcode] 56.Merge Intervals
- 【leetcode】56. Merge Intervals
- 56. Merge Intervals
- [leetcode] 56.Merge Intervals
- 56. Merge Intervals
- **LeetCode 56. Merge Intervals
- LeetCode 56. Merge Intervals
- 56. Merge Intervals
- leetcode 56. Merge Intervals
- 【LeetCode】56. Merge Intervals
- LeetCode 56. Merge Intervals
- 56. Merge Intervals
- 【leetcode】56. Merge Intervals
- android事件分发机制
- cython笔记:调用C++类时,如果不实现析构函数,会有什么样的后果
- 获取构造器
- 文本处理工具
- 正则表达式及应用
- 56. Merge Intervals
- Android程序员学PHP开发(34)-ThinkPHP5.0(6)自动生成-PhpStorm
- Android自定义View(ImageView画圆)
- 关于[Ljava.lang.String;不能转换为java.lang.String错误
- cocos2d-x 3.X 接收图片 base64 转码显示
- Android UI--Shape和Selector
- redis常用运维命令以及需要注意的参数
- 获取构造器
- 网页基础布局