题目描述:
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
解法:
思路
题目要求我们将重叠的部分合并在一起,首先我们规定int left = intervals[ i ][ 0 ];
int right = intervals[ i ][ 1];那么我们只需要判断出重叠的条件是:intervals[ i ][ 1 ]>intervals[ i+1 ][ 0 ],即可,如果这个条件成立,那么我们就将Math.max(right, intervals[i+1][1])中最大的数取出来,赋值给right。然后再循环判断i后面的数组所代表的区间是否和当前区间重合,重合就循环赋值,否则就加入到res中。
详细代码:
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new ArrayList<>();
if(intervals==null) return res.toArray(new int[0][]);
Arrays.sort(intervals, new Comparator<int[]>(){
//将数组元素的第一个按照升序进行排序
public int compare(int[] o1,int[] o2){
return o1[0]-o2[0];
}
});
int i =0;
while(i<intervals.length){
int left = intervals[i][0];
int right = intervals[i][1];
while(i<intervals.length-1&&right>=intervals[i+1][0]){
right = Math.max(right, intervals[i+1][1]);
i++;
}
res.add(new int[]{
left,right});
i++;
}
//将res转换为二维数组
return res.toArray(new int[0][]);
}
}