1. 程式人生 > 實用技巧 >LeetCode#56-合併區間

LeetCode#56-合併區間

package shuzu;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/*
56. 合併區間
給出一個區間的集合,請合併所有重疊的區間。

示例 1:

輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].
示例 2:

輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
 */
public class p56 {
    public int[][] merge(int[][] intervals) {
        ArrayList<List<Integer>>arrayList=new ArrayList<>();
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0]-o2[0];
            }
        });
        int ans[][]=new int[0][0];
        if(intervals==null||intervals.length==0)return ans;
        int i=0;
        while (i<intervals.length-1){
            if(canUnion(intervals[i],intervals[i+1])){//如果能夠合併就合併
                intervals[i+1]=Union(intervals[i],intervals[i+1]);
                i++;
            }
            else {//不能合併
                ArrayList<Integer>list=new ArrayList<>();
                list.add(intervals[i][0]);
                list.add(intervals[i][1]);
                arrayList.add(list);
                i++;
            }
        }
        if(!canUnion(intervals[intervals.length-2],intervals[intervals.length-1])){
            ArrayList<Integer>list=new ArrayList<>();
            list.add(intervals[intervals.length-1][0]);
            list.add(intervals[intervals.length-1][1]);
            arrayList.add(list);
        }
        int res[][]=new int[arrayList.size()][2];
        for(int j=0;j<arrayList.size();j++){
            res[j][0]=arrayList.get(j).get(0);
            res[j][1]=arrayList.get(j).get(1);
        }
        return res;

    }
    public boolean canUnion(int []num1,int []num2){//判斷兩個區間陣列能否合併
        if(num1[1]>=num2[0])return true;
        return false;
    }
    public int [] Union(int []num1,int []num2){//合併兩個區間
        int res[]=new int[2];
        res[0]=num1[0]<num2[0]?num1[0]:num2[0];
        res[1]=num1[1]>num2[1]?num1[1]:num2[1];
        return res;
    }
}

  執行結果: