[LeetCode
来源:互联网 发布:某酒店2000w数据 编辑:程序博客网 时间:2024/06/15 21:41
1 问题
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].
2 分析
题目要合并重叠的区间,直觉上需要将区间排序。排序的方法是:
- 先按照区间左端点排序
- 如果左端点相同,再按照右端点排序
假设排序后的区间为
a2<a3 这种情况下,两个区间不需要合并.a3≤a2≤a4 这种情况下,这两个区间需要合并,合并后区间的左端点是a1 , 右端点是a4 .a2>a4 这种情况下, 这两个区间需要合并,合并后区间的左端点是a1 , 右端点是a2 .
重复以上步骤,直到所有的区间都被合并处理。
3 代码
public class Solution { public List<Interval> merge(List<Interval> intervals) { Collections.sort(intervals, new Comparator<Interval>(){ public int compare(Interval o1, Interval o2){ if(o1.start != o2.start){ return o1.start - o2.start; }else{ return o1.end - o2.end; } } } ); int i = 0; while(i < intervals.size() - 1){ if(intervals.get(i).end >= intervals.get(i+1).start){ intervals.get(i).end = Math.max(intervals.get(i).end, intervals.get(i+1).end); intervals.remove(i+1); }else{ i = i + 1; } } return intervals; }}
代码中有以下几点需要注意:
- 使用
Collections.sort
方法对List
进行排序 Comparator<T>()
接口可以使用lambda表达式代替,简化代码while()
循环可以用iterator
代替,使逻辑更加清晰
阅读全文
0 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- 你真的需要活动目录吗?【转】
- 我多想自己是Superman
- 中国“国家资本主义”引西方侧目
- 10 大存储【转】
- 搜索引擎学习笔记-引论
- [LeetCode
- Windows程序设计学习笔记(三)——窗口和消息
- Sever 2008 服务器学习笔记(一)——存储
- 初识WINS
- 菜鸟变达人 服务器硬盘产品技术全解析【转】
- 搜索引擎学习笔记-第二章 Web搜索引擎工作原理和体系结构
- 最笨的孩子去读书【转】
- sublime text3 快捷键
- 刀片服务器的春天将何时到来?【转】