LeetCode#56-合併區間
阿新 • • 發佈:2020-07-22
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; } }
執行結果: