LeetCode 56. Merge Intervals

原题链接在这里:https://leetcode.com/problems/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].

题解:

首先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 相等,也是要合并的。

Time Complexity: O(n*logn). n是List<Interval> intervals 的长度,排序用了O(nlogn). 之后只走了一遍list, 用了O(n), 一共是 O(n*logn).

Space: O(n). 是res的大小.

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         List<Interval> res = new ArrayList<Interval>();
13         if(intervals == null || intervals.size() == 0){
14             return res;
15         }
16         
17         //排序
18         Collections.sort(intervals, new Comparator<Interval>(){
19            public int compare(Interval i1, Interval i2){
20                if(i1.start == i2.start){
21                    return i1.end-i2.end;
22                }
23                return i1.start - i2.start;
24            } 
25         });
26         
27         Interval pre = intervals.get(0);
28         for(int i = 1; i<intervals.size(); i++){
29             Interval cur = intervals.get(i);
30             if(pre.end >= cur.start){
31                 pre.end = Math.max(pre.end, cur.end);
32             }else{
33                 res.add(pre);
34                 pre = cur;
35             }
36         }
37         
38         //最后要加上最后一段interval
39         res.add(pre);
40         return res;
41     }
42 }

 类似Insert IntervalAdd Bold Tag in StringPartition LabelsMeeting RoomsMeeting Rooms IIRange ModuleInterval List Intersections.

posted @ 2015-10-16 22:24  Dylan_Java_NYC  阅读(425)  评论(0编辑  收藏  举报