一、题目:
以数组表示若干个区间的集合,合并所有的重叠区间,返回一个不重叠的区间数组。

二、思路:
1、排序数组,再遍历,比较当前区间与下一个区间是否重叠,如果重叠则更新下一个区间,不重叠直接加入结果。
2、注意:遍历时为了不越界+1,遍历到 intervals.length-2,最后要加上最后一个区间。
三、代码:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new ArrayList<>();
Arrays.sort(intervals,(a,b) -> a[0] - b[0]);
for(int i = 0; i <= intervals.length-2;i++){
if(intervals[i][1] >= intervals[i+1][0]){
intervals[i+1][0] = Math.min(intervals[i][0],intervals[i+1][0]);
intervals[i+1][1] = Math.max(intervals[i][1],intervals[i+1][1]);
}else{
res.add(intervals[i]);
}
}
res.add(intervals[intervals.length-1]);
return res.toArray(new int[res.size()][]);
}
}
四、语法记录一下
Arrays.sort(intervals,(a,b) -> a[0] - b[0]); 按照区间的起始位置进行排序。
res.toArray(new int[res.size()][]); List转成二维数组。
494

被折叠的 条评论
为什么被折叠?



