思路: 合并区间分为两种情况:
- 前一个数组右边界 >= 后一个数组左边界 eg:[1,3],[2,6] ===> 合并为[1,6]
- 前一个数组右边界 >= 后一个数组右边界 eg:[1,6],[2,4] ===> 合并为[1,6]
class Solution {
public int[][] merge(int[][] intervals) {
if(intervals.length <= 1){
return intervals;
}
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
List<int[]> list = new ArrayList<>();
for(int i = 1; i < intervals.length; i++){
boolean change = false;
if(intervals[i - 1][1] >= intervals[i][0]){
change = true;
intervals[i][0] = intervals[i - 1][0];
}
if(intervals[i - 1][1] >= intervals[i][1]){
change = true;
intervals[i][0] = intervals[i - 1][0];
intervals[i][1] = intervals[i - 1][1];
}
if(change == false){
list.add(intervals[i - 1]);
}
}
list.add(intervals[intervals.length - 1]);
return list.toArray(new int[list.size()][]);
}
}
总结:
这道题目情况划分比较简单,代码思路比较清晰,主要难点是对二维数组操作不熟练,通过这道题目可以加深一下对二维数组和ArrayList相互转换理解。