import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class Mergelntervals {
//按区间左边界排序
public int[][] merge(int[][] intervals) {
//定义一个结果数组
ArrayList<int[]> result = new ArrayList<>();
//1.将所有区间按照左边界排序
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0];
}
});
//2.遍历排序后的区间,逐个合并
for (int[] interval : intervals) {
//记录当前的左右边界
int left = interval[0],right = interval[1];
//获取结果数组长度
int length = result.size();
//如果left比最后一个区间右边界大,不能合并,直接添加到结果
if(length==0||left>result.get(length-1)[1]){
result.add(interval);
}else {
//可以合并
int mergedLeft = result.get(length-1)[0];
int mergedRight = Math.max(result.get(length-1)[1],right);
result.set(length-1,new int[]{mergedLeft,mergedRight});
}
}
return result.toArray(new int[result.size()][]);
}
public static void main(String[] args) {
int[][] intervals = {{1,3}, {2,6}, {8,10}, {15,18}};
Mergelntervals mergelntervals = new Mergelntervals();
for (int[] interval :mergelntervals.merge(intervals)) {
printArray(interval);
}
}
public static void printArray(int[] arr){
for (int num:arr) {
System.out.print(num+"\t");
}
System.out.println();
}
}