算法不难,主要是int[][]的长度未知,我们需要先通过List存储,然后最后转为二维数组。
思路:先讲intervals数组按照第一个元素进行排序,然后对其进行遍历,如果后一个的左边界小于前一个的右边界并且后一个的右边界大于前一个的右边界(例如[1,3]和[2,6])则将第一个的右边界更新为后一个的右边界,依次遍历直至没有交集为止,再将其存入list当中。
代码解析:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> list = new ArrayList<>();
int len = intervals.length;
//先将intervals数组按照第一个元素进行排序
Arrays.sort(intervals, (a,b) -> a[0]-b[0]);
int i = 0, n = intervals.length;
while(i < n){
int left = intervals[i][0];
int right = intervals[i][1];
//后一个的左边界小于前一个的右边界
while(i < n - 1 && right >= intervals[i+1][0]){
//后一个的右边界与前一个的右边界比较大小
right = Math.max(right, intervals[i+1][1]);
i++;
}
list.add(new int[]{left, right});
i++;
}
//list转int[][]
return list.toArray(new int[list.size()][2]);
}
}