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


浙公网安备 33010602011771号