Merge Intervals

Problem:

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].


先根據start按升序排序,再依序合併重疊區間。爲了節省空間,實現了一個鏈表的快排方法。
Solution:
/**
 * 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) {
        if(intervals==null||intervals.size()<=1)
             return intervals;
        intervalQuickSort(intervals,0,intervals.size()-1);
        for(int i=0;i<intervals.size()-1;)
            if(intervalMerge(intervals.get(i), intervals.get(i+1)))
                intervals.remove(i+1);
            else 
                i++;
        return intervals;
    }
     private boolean intervalMerge(Interval a,Interval b)
     {
         if(Math.min(a.end, b.end)-Math.max(a.start, b.start)>=0)
         {
             a.start = Math.min(a.start, b.start);
             a.end = Math.max(a.end, b.end);
             return true;
         }
         return false;
      }
     private void intervalQuickSort(List<Interval> intervals,int p,int q)
     {
         if(p>=q)
             return;
         int b = p,e = q;
    
         while(b<e)
         {
             while(e>b&&intervals.get(e).start>=intervals.get(b).start)
                 e--;
             intervalSwap(intervals.get(b),intervals.get(e));
             while(e>b&&intervals.get(b).start<=intervals.get(e).start)
                 b++;
             intervalSwap(intervals.get(b),intervals.get(e));
         }
         intervalQuickSort(intervals, p, b-1);
         intervalQuickSort(intervals, b+1, q);
    }
    private void intervalSwap(Interval a,Interval b)
    {
         int tmp;
         tmp = b.start;
         b.start = a.start;
         a.start = tmp;
         tmp = b.end;
         b.end = a.end;
         a.end = tmp;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章