题目链接:LeeCode56合并区间
题目描述:
先排序(以二维数组首数字排序),用一个队列存当前待解决的序列(不确定下一个范围是否和当前范围重叠时为待解决序列)。当待解决序列右边界小于下一序列左边界时出队,将下一个序列放进来,依次类推,该题需要注意返回的数组长度有比原来数组长度小的概率,故应该再开一个数组转一下,如果有大佬会别的方法教教我也行qaq
class Solution {
public static int[][] merge(int[][] intervals) {
Queue<int[]> queue=new ArrayDeque<>();
int [][] ans=new int[intervals.length][2];
int index=0;
Arrays.sort(intervals,(a,b)->a[0]-b[0]);
queue.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
int[] peek = queue.poll();
if(peek[1]>=intervals[i][0]){
if(peek[1]<intervals[i][1]){
peek[1]=intervals[i][1];
}
queue.add(peek);
}else{
ans[index][0]=peek[0];
ans[index++][1]=peek[1];
queue.add(intervals[i]);
}
}
if(!queue.isEmpty()){
int[] poll = queue.poll();
ans[index][0]=poll[0];
ans[index++][1]=poll[1];
}
int[][] ans1=new int[index][2];
for (int i = 0; i < index; i++) {
ans1[i]=Arrays.copyOf(ans[i],2);
}
return ans1;
}
}