Merge Intervals 合并区间@LeetCode
来源:互联网 发布:淘宝客里的返利管理 编辑:程序博客网 时间:2024/05/01 14:31
采用的是和Insert Interval一样的思想,只不过最开头要先排序一下,用到了java的Collections.sort(List<Interval> list, Comparator<? super Interval> c)
自己实现了一个Comparator的compare方法
http://blog.csdn.net/fightforyourdream/article/details/16876485
package Level4;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import Utility.Interval;/** * 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].Discuss * */public class S56 {public static void main(String[] args) {ArrayList<Interval> intervals = new ArrayList<Interval>();intervals.add(new Interval(2,3));intervals.add(new Interval(3,4));intervals.add(new Interval(6,7));intervals.add(new Interval(1,10));System.out.println(merge(intervals));}public static ArrayList<Interval> merge(ArrayList<Interval> intervals) {ArrayList<Interval> ret = new ArrayList<Interval>();if(intervals.size() == 0){return ret;}// 要先按照start的顺序排序一下,这样就能保证全部能merge了!Collections.sort(intervals, new Comparator<Interval>() {@Overridepublic int compare(Interval o1, Interval o2) {return o1.start - o2.start;// 升序排}});Interval ref = intervals.get(0);for(int i=1; i<intervals.size(); i++){Interval cur = intervals.get(i);if(cur.end < ref.start){ret.add(cur);}else if(ref.end < cur.start){ret.add(ref);ref = cur;}else{ref = new Interval(Math.min(ref.start, cur.start), Math.max(ref.end, cur.end));}}ret.add(ref);return ret;}}
Second try:
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;/* 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]. */public class MergeIntervals {public static void main(String[] args) {}public ArrayList<Interval> merge(ArrayList<Interval> intervals) {if(intervals==null || intervals.size()==0){return intervals;}Collections.sort(intervals, new Comparator<Interval>() {@Overridepublic int compare(Interval o1, Interval o2) {return o1.start-o2.start;// 按照start的升序排列}});Interval merged = intervals.get(0);ArrayList<Interval> ret = new ArrayList<Interval>();for(int i=1; i<intervals.size(); i++){Interval cur = intervals.get(i);if(cur.end < merged.start){ret.add(cur);}else if(merged.end < cur.start){ret.add(merged);merged = cur;}else{int min = Math.min(cur.start, merged.start);int max = Math.max(cur.end, merged.end);merged = new Interval(min, max);}}ret.add(merged);return ret;}public static class Interval{int start;int end;public Interval(){start = 0;end = 0;}public Interval(int s, int e){start = s;end = e;}}}
/** * 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) { List<Interval> ret = new ArrayList<Interval>(); if(intervals.size() == 0) { return ret; } Collections.sort(intervals, new Comparator<Interval>(){ public int compare(Interval i1,Interval i2) { return i1.start - i2.start; } } ); Interval merged = new Interval(intervals.get(0).start, intervals.get(0).end); for(int i=1; i<intervals.size(); i++) { Interval cur = intervals.get(i); if(cur.start <= merged.end) { merged = new Interval(Math.min(merged.start, cur.start), Math.max(merged.end, cur.end)); } else { ret.add(merged); merged = cur; } } ret.add(merged); return ret; }}
- Merge Intervals 合并区间@LeetCode
- LeetCode | Merge Intervals(合并区间间隔)
- LeetCode-56 Merge Intervals(合并区间)
- leetcode-56 Merge Intervals 合并区间
- LeetCode 56. Merge Intervals(合并区间)
- Leetcode 56 - Merge Intervals(区间合并)
- LeetCode 56. Merge Intervals 合并区间
- leetcode 56. Merge Intervals 区间合并
- 【区间合并】Merge Intervals
- Merge Intervals 合并区间
- 合并区间 Merge Intervals
- Merge Intervals 多区间合并
- LeetCode OJ 之 Merge Intervals(合并区间)
- leetCode 56.Merge Intervals (合并区间) 解题思路和方法
- LeetCode----56. Merge Intervals(合并包含重复区间的数组)
- LeetCode | 56. Merge Intervals——合并区间
- 56. Merge Intervals 对区间进行合并
- Array----- 56. Merge Intervals(合并区间)
- Linux调试工具汇总
- Sicily 1750 运动会
- 混世魔王:针对百度搜索引擎的黑白双层优化方案
- UIWebView识别链接代码
- Java正则表达式判断手机号
- Merge Intervals 合并区间@LeetCode
- 使用Settings Bundle为程序添加设置项
- Sicily 1346 金明的预算方案
- 多线程程序中操作的原子性
- iPhone开发部分总结_3_
- 用递归移动盘子
- 随便谈谈——层层递进式的中国式互联网关怀
- acm--查找一个自定数组中位置所对应的值
- 关于 Debian