标签:
原题链接在这里:https://leetcode.com/problems/merge-intervals/
首先sort list 中的interval. 然后比较 前一个 interval的end是否 >= 后一个interval 的start, 若是,则合并这两个interval, 用来和下一个比较。若不是,则把这段interval 加到res中去。
通过本题见到了如何改写Comparator, 参见了这篇文章:http://www.blogjava.net/yesjoy/articles/126046.html 从Comparator Interface implement 出一个class, 定义了interval的比较方法。
Note: 注意corner case, 若是pre的end 和 下一个的start 相等,也是要合并的。
AC Java:
1 /** 2 * Definition for an interval. 3 * public class Interval { 4 * int start; 5 * int end; 6 * Interval() { start = 0; end = 0; } 7 * Interval(int s, int e) { start = s; end = e; } 8 * } 9 */ 10 public class Solution { 11 public List<Interval> merge(List<Interval> intervals) { 12 if(intervals == null || intervals.size() == 0){ 13 return intervals; 14 } 15 Collections.sort(intervals, new IntervalComparator()); 16 List<Interval> res = new ArrayList<Interval>(); 17 Interval pre = intervals.get(0); 18 for(int i = 1; i<intervals.size(); i++){ 19 if(pre.end >= intervals.get(i).start){ 20 pre.end = Math.max(pre.end,intervals.get(i).end); 21 }else{ 22 res.add(pre); 23 pre = intervals.get(i); 24 } 25 } 26 res.add(pre); 27 return res; 28 } 29 } 30 31 class IntervalComparator implements Comparator<Interval>{ 32 public int compare(Interval i1, Interval i2){ 33 if(i1.start == i2.start){ 34 return i1.end - i2.end; 35 } 36 return i1.start - i2.start; 37 } 38 }
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4886559.html