首页 > 其他 > 详细

LeetCode Merge Intervals

时间:2015-10-16 23:04:14      阅读:276      评论:0      收藏:0      [点我收藏+]

原题链接在这里: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 }

 

LeetCode Merge Intervals

原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4886559.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!