问题
给出一个区间的集合,请合并所有重叠的区间。
例子
思路
-
方法1
$$$$
先按照第一个元素的大小把一维数组从小到大排序,list存储最终结果的一维数组【按照第一个数从小到到的顺序】,遍历排好序的二维数组,如果一维数组的第二个数<=list中最后的一维数组的第一个数,则合并,并更新list,否则,把该一维数组放入list
-
方法2
$$$$
代码
//方法1
class Solution {
public int[][] merge(int[][] arr) {
if(arr.length==0) return new int[0][];
Arrays.sort(arr, (a,b)->a[0]-b[0]);
List<int[]> list = new ArrayList<>();
list.add(arr[0]);
for(int i=1; i<arr.length; i++) {
int[] t = list.get(list.size()-1);
//因为区间 [1,4] 和 [4,5] 可被视为重叠区间。
if(arr[i][0]<=t[1]) {
int a = Math.min(arr[i][0], t[0]);
int b = Math.max(arr[i][1], t[1]);
list.get(list.size()-1)[0]=a;
list.get(list.size()-1)[1]=b;
}else
list.add(arr[i]);
}
int[][] res = new int[list.size()][];
list.toArray(res);
return res;
}
}
//方法2