20200405
题目 :合并区间
给出一个区间的集合,请合并所有重叠的区间。
示例:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
思路:
1.首先根据二维数组中每个一维数组的[0]
进行升序排序,即根据start
进行排序;
2.合并条件是前一个的结束 大于等于后一个的开始
3.然后建立linkedList
作为中间处理对象,当集合为空或者不满足条件,加入集合的末尾;
4.集合不为空且满足合并条件时,取集合中最后一个元素让它的end
为原值和合并区间end
中的最大值,解决1,5;2,4
这样的区间问题。
5.集合处理完成,对其循环遍历取首元素,放入res
结果数组中
code
class Solution{
public int[][] merge(int[][] arr){
Arrays.parallelSort(arr,Comparator.comparingInt(x -> x[0]));
LinkedList<int[]> list = new LinkedList<>();
for(int i=0;i<arr.length;i++){
if(list.size()==0||list.getLast()[1]<arr[i][0]){
list.add(arr[i]);
}else{
list.getLast()[1] = Math.max(list.getLast()[1],arr[i][1]);
}
}
int[][] res = new int[list.size()][2];
int index = 0;
while(!list.isEmpty()){
res[index++] = list.removeFirst();
}
return res;
}
}