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; } }
运行结果: