#56 合并区间
给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
思路
- 由于要合并区间,所以要先对区间集合进行排序。
- 排序后从最低的区间开始。如果后面的区间和前面的区间有交叉,那么就将其合并。
知识点
- lambda表达式快速排序。
代码
class Solution {
public int[][] merge(int[][] intervals) {
//先对区间进行升序排序
Arrays.sort(intervals,(o1,o2)->o1[0]-o2[0]);
//判断区间
ArrayList<int[]> list = new ArrayList<>();
for(int[] interval:intervals){
//如果list为空
if(list.size() == 0){
list.add(interval);
}else if(interval[0] <= list.get(list.size()-1)[1]){
//interval[0]小于list中上一个元素的[1]
list.get(list.size()-1)[1] = list.get(list.size()-1)[1]>interval[1]?list.get(list.size()-1)[1]:interval[1];
}else{
list.add(interval);
}
}
// for(int[] i:list){
// System.out.print(Arrays.toString(i)+" ");
// }
// int[][] result = new int[list.size()][2];
// for(int i = 0; i<list.size();i++){
// result[i] = list.get(i);
// }
return list.toArray(new int[0][]);
}
}