题目
给出一个区间的集合,请合并所有重叠的区间。
示例
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
代码
class Solution {
public static int[][] merge(int[][] intervals) {
if (intervals.length <= 1) {
return intervals;
}
//首先对二维数组按照每个数组的第一个大小进行排序,按照每个一位数组的第一个数从小到大排序
Arrays.sort(intervals, new Comparator<int[]>() {
@Override
public int compare(int[]a1,int[]a2){
return a1[0]-a2[0];
}
});
ArrayList<ArrayList<Integer>>list=new ArrayList<>();
for(int i=0;i<intervals.length;i++){
List<Integer>list_copy=new ArrayList<>();
//每个list_copy添加两个元素
//第一个直接就是intervals[i][0];
//关键是判断第二个元素
list_copy.add(intervals[i][0]);
//temp用于保存当前可以合并区间的最大的第二个数
int temps=intervals[i][1];
//如果最大的第二个数一直大于i位置后一个一位数组的第一个元素
//i++
while (i < intervals.length - 1 && temps >= intervals[i + 1][0]) {
temps=Math.max(temps,intervals[i+1][1]);
i++;
}
list_copy.add(temps);
list.add(new ArrayList<>(list_copy));
}
int[][]result=new int[list.size()][2];
for(int i=0;i<list.size();i++){
result[i][0]=list.get(i).get(0);
result[i][1]=list.get(i).get(1);
}
return result;
}
}