LeeCode56合并区间(Java)(队列)

题目链接: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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43590593/article/details/112613266