Merge Intervals
来源:互联网 发布:cisco mac acl 编辑:程序博客网 时间:2024/05/20 13:06
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]
思路:先按起始位置对每个区间排序,然后逐个扫描添加:若当前元素与之前添加到列表的最后一个元素有重叠,则修改之前添加的最后一个元素使其包含当前元素,否则就把当前元素添加至列表。
反证法证明:程序判断条件是每个区间按起始位置大小排列且相邻区间有重叠则合并,若算法不正确,则存在如下情况:对于区间i,j,k (i<j<k),i与j、j与k均不可合并(因为程序的判断条件),而i与k可合并(假设算法不正确),则:
ints[i].end<ints[j].start
ints[j].end<ints[k].start
ints[i].end≥ints[k].start
然而:
ints[i].end<ints[j].start≤ints[j].end<ints[k].start
ints[i].end≥ints[k].start
矛盾,原算法正确。
/** * 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 class Comparartable implements Comparator<Interval>{ public int compare(Interval a,Interval b){ return (a.start<b.start)?-1:(a.start==b.start)?0:1; } } public List<Interval> merge(List<Interval> intervals) { Collections.sort(intervals,new Comparartable()); LinkedList<Interval> merge =new LinkedList<Interval>(); for(Interval i:intervals){ if(merge.isEmpty()||i.start>merge.getLast().end){ merge.add(i); }else{ merge.getLast().end = Math.max(merge.getLast().end,i.end); } } return merge; }}
阅读全文
0 0
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- merge intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- CryptographicBuffer的使用技巧
- Bootstrap模态框使用WebUploader点击失效问题解决
- Unity Shader中的概念及原理综述
- 浅谈模板引擎之artTemplate
- 文本情感分类—深度学习模型基本概念
- Merge Intervals
- PHPExcel 大数据的导出
- vue.js 学习笔记
- bootstrap上传插件fileinput自动上传&成功回调 转载 2016年10月11日 11:24:09 7141 bootstrap上传插件fileinput功能非常强大,本文给出一例自动上传
- 【知识图谱】知识图谱从0级到10级简化版
- 快照
- 所有子集的和-LintCode
- 【工业物联网】一文了解如何实现新型工业化、制造强国(工业物联网白皮书2017)服务|金融|生产|物流应用案例
- 【工业物联网】工业物联网平台的“事前验尸报告”!