间隔问题,合并间隔(merge interval),插入间隔(insert interval)
2016-08-12 17:54
393 查看
Merge Interval:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
算法分析:首先要对给定序列排序。然后再去遍历合并。
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
Example 2:
Given
This is because the new interval
给定间隔序列和插入间隔,默认给定间隔序列有序,返回合并后的不重叠的间隔序列。是上一道题的变形。
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].
算法分析:首先要对给定序列排序。然后再去遍历合并。
class Interval { int start; int end; Interval() { start = 0; end = 0; } Interval(int s, int e) { start = s; end = e; } } public class MergeIntervals { public List<Interval> merge(List<Interval> intervals) { List<Interval> res = new ArrayList<>(); if(intervals == null || intervals.size() == 0) { return res; } Collections.sort(intervals, new Comparator<Interval>()//自定义比较方法,外部实现Comparator接口 { public int compare(Interval i1, Interval i2) { if(i1.start != i2.start) { return i1.start - i2.start; } else { return i1.end - i2.end; } } }); Interval pre = intervals.get(0); for(int i = 0; i < intervals.size(); i ++) { Interval curr = intervals.get(i); if(curr.start > pre.end) { res.add(pre); pre = curr; } else { Interval merged = new Interval(pre.start, Math.max(pre.end, curr.end)); pre = merged; } } res.add(pre); return res; } }
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].
给定间隔序列和插入间隔,默认给定间隔序列有序,返回合并后的不重叠的间隔序列。是上一道题的变形。
public class InsertInterval { public List<Interval> insert(List<Interval> intervals, Interval newInterval) { List<Interval> res = new ArrayList<>(); for (Interval interval : intervals) { if(interval.end < newInterval.start) { res.add(interval); } else if(interval.start > newInterval.end) { res.add(newInterval); newInterval = interval; } else if(interval.start <= newInterval.end || interval.end >= newInterval.start) { newInterval = new Interval(Math.min(interval.start, newInterval.start),Math.max(interval.end, newInterval.end)); } } res.add(newInterval); return res; } }
相关文章推荐
- Java Insert Interval(插入间隔)
- [leetcode] 区间合并问题 Merge Interval
- 关于含有标识字段的数据表中记录的插入问题解决(IDENTITY_INSERT)
- 链表list容器中通过splice合并链表与merge的不同,及需要注意的问题
- [LeetCode] Merge Interval系列,题:Insert Interval,Merge Intervals
- mysql中insert与select的嵌套使用解决组合字段插入问题
- Java Merge Intervals(合并间隔)
- 关于Access Insert Into 语句的时间插入问题?
- LeetCode | Insert Interval(插入区间)
- Insert Interval(区间插入)
- 插入时间段 Insert Interval
- svn中合并(merge)问题和如何解决版本冲突
- PHP 函数之 array_merge_recursive,相同键合并问题
- Insert Interval 插入区间@LeetCode
- 链表list容器中通过splice合并链表与merge的不同,及需要注意的问题
- 【LeetCode】Merge Intervals && Insert Interval
- 合并程序集时出错的问题ILMerge.Merge.ERROR...
- 关于SQL Server2005支不支持一条insert语句插入多条记录的问题
- Leetcode: Merge/Insert Interval
- 【LeetCode】Merge Intervals && Insert Interval