- 先排序,题目没有说明数组是否有序,因此利用每个一维数组的首个元素对每个一位数组进行排序,注意compare方法的写法;
- 排序后,从头部开始对数组进行遍历,若当前数组的第二个元素比下一个数组的第一个元素大,说明两个数组表示的区间有重合,更新right边界的最大值,并鸡血遍历数组,直到两个数组没有重合区域。
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> list = new ArrayList<>();
Arrays.sort(intervals, new Comparator<int[]>(){
@Override
public int compare(int[] a, int[] b){
return a[0]-b[0];
}
});
int i=0;
int len = intervals.length;
while(i<len){
int left = intervals[i][0];
int right = intervals[i][1];
while(i<len-1 && right >= intervals[i+1][0]){
right = Math.max(right, intervals[i+1][1]);
i++;
}
list.add(new int[] {left, right});
i++;
}
return list.toArray(new int[0][]);
}
}