题目所属分类
二维数组的按照排序大小的方法要记住 Arrays.sort(a, (i1, i2) -> (i1[0] == i2[0] ? i2[1] - i1[1] : i1[0] - i2[0]));
同时还有list集合转为数组的形式res.toArray(new int[0][0])
Java泛型集合的toArray方法
原题链接
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
代码案例:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
题解
class Solution {
public int[][] merge(int[][] a) {
List<int[]> res = new ArrayList<>();
if(a.length ==0 ) return null;
Arrays.sort(a, (i1, i2) -> (i1[0] == i2[0] ? i2[1] - i1[1] : i1[0] - i2[0]));
int l = a[0][0] ;int r = a[0][1];//第一个区间的左右端点
//从第二个端点开始遍历
for(int i = 1 ; i < a.length ; i++){
if(a[i][0] > r ){
res.add(new int[]{l,r});
l = a[i][0];
r = a[i][1];
}else r = Math.max(r,a[i][1]);
}
//最后一个区间要保存
res.add(new int[]{l,r});
return res.toArray(new int[0][0]) ;
}
}