[LeetCode]Merge Intervals && Insert Interval
来源:互联网 发布:pkpm软件视频教程 编辑:程序博客网 时间:2024/05/29 09:36
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]
.
LeetCode: https://oj.leetcode.com/problems/merge-intervals/
题解:这道题要求合并所有重叠的区间,当我们看到这道题时,脑子里肯定会产生一根数轴,然后又很多区间段,题目就是要就将有重叠的区间段合并;所以对于这道题,我们首先要做的就是排序,因为排序有助于使问题变得更加清晰,排序的原则:对于区间[s, e],我们首先按s从小到大排序,当s相同时,按e从小到大排序。合并的过程就是比较前一个区间[s1, e1]和相邻的后一个区间[s2, e2]中,e1 和 s2 的大小,如果 e1 < s2,区间无法合并;反之,合并区间。
public class Solution { public List<Interval> merge(List<Interval> intervals) { List<Interval> result = new ArrayList<Interval>(); if(intervals == null || intervals.size() == 0) return result; Comparator<Interval> comp = new Comparator<Interval>(){ @Override public int compare(Interval o1, Interval o2){ if(o1.start == o2.start) return o1.end - o2.end; return o1.start - o2.start; } }; Collections.sort(intervals, comp); for(Interval elem : intervals){ if(result.isEmpty()){ result.add(elem); }else{ if(elem.start > result.get(result.size()-1).end) result.add(elem); else{ result.get(result.size()-1).end = Math.max(elem.end, result.get(result.size()-1).end); } } } return result; }}
Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9]
, insert and merge [2,5]
in as [1,5],[6,9]
.
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16]
, insert and merge [4,9]
in as [1,2],[3,10],[12,16]
.
This is because the new interval [4,9]
overlaps with [3,5],[6,7],[8,10]
.
题解:这道题其实是上面那道题的一个步骤,首先各个区间都已经排好序,所以排序那一步不用做,接下来就是找位置和Merge,区间集合中第i个区间表示为[si, ei],需要插入的区间newInterval表示为[nsi, nei],则所有满足ei < nsi的区间[si, ei]均在newInterval前面;接下来对于ei < nei的区间均进行合并;代码如下:
public class Solution { public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) { ArrayList<Interval> res = new ArrayList<Interval>(); if(intervals.size()==0) { res.add(newInterval); return res; } int i=0; while(i<intervals.size() && intervals.get(i).end<newInterval.start) { res.add(intervals.get(i)); i++; } if(i<intervals.size()) newInterval.start = Math.min(newInterval.start, intervals.get(i).start); res.add(newInterval); while(i<intervals.size() && intervals.get(i).start<=newInterval.end) { newInterval.end = Math.max(newInterval.end, intervals.get(i).end); i++; } while(i<intervals.size()) { res.add(intervals.get(i)); i++; } return res; }}
- [LeetCode] Merge Intervals、Insert Interval:
- 【LeetCode】Merge Intervals && Insert Interval
- leetcode Merge Intervals & Insert Interval
- 【LeetCode】Merge Intervals && Insert Interval
- [LeetCode]Merge Intervals && Insert Interval
- LeetCode 57. Insert Interval/56. Merge Intervals
- Leetcode 56. Merge Intervals & 57. Insert Interval
- Merge Intervals And Insert Interval -- Leetcode
- leetcode 56. Merge Intervals 57. Insert Interval
- Merge Intervals & Insert Interval
- Merge Intervals && Insert Interval
- Leetcode 56. Merge Intervals && 57. Insert Interval(Hard)
- LeetCode: Insert Interval & Merge Interval
- 56/57. Merge Intervals; Insert Interval
- 57. Insert Interval & 56. Merge Intervals
- 56-Merge Intervals && 57-Insert Interval
- 56. Merge Intervals && 57. Insert Interval
- LeetCode题解:Merge/Insert Interval
- 使用JDBC获取各数据库的Meta信息——表以及对应的列
- STL algorithm算法inplace_merge(24)
- 斐波拿契数列实现
- Axis2 创建 web service (2) : 同步异步调用
- HDU1358 Period KMP循环节问题
- [LeetCode]Merge Intervals && Insert Interval
- 适量消极情绪有助于提高工作能力
- Android中IntentService的原理及使用
- 请commit!commit!
- Android源码分析之SparseArray
- 有事心不乱
- Android内核&源码下载
- MySQL开发规范
- CSS3 详解box-shadow