LeetCode 378. 有序矩阵中第K小的元素 Java

Posted 鱼の家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 378. 有序矩阵中第K小的元素 Java相关的知识,希望对你有一定的参考价值。

容易想到的暴力解法:把数据都取出来排序,需要n2大小的数组存储

既然数组是有序的,把每一行看成一个有序数组,对这些数组进行归并排序,归并到第k个数为止。
看了题解,了解到优先级队列PriorityQueue可以用于实现归并排序,PriorityQueue底层是一个堆的结构。具体可参考这篇文章 刷算法不知道PriorityQueue?看了这篇文章才知道他有多实用

还有一种二分查找的算法,感觉不太容易想出。

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>(){
            public int compare(int a[],int b[]){
                return a[0] - b[0];
            }
        });
        int n = matrix.length;
        for(int i=0;i<n;i++){
            pq.offer(new int[]{matrix[i][0],i,0});
        }
        for(int i=0;i<k-1;i++){
            int []now = pq.poll();
            if(now[2] != n-1){
                pq.offer(new int[]{matrix[now[1]][now[2]+1],now[1],now[2]+1});
            }
        }
        return pq.poll()[0];
    }
}

以上是关于LeetCode 378. 有序矩阵中第K小的元素 Java的主要内容,如果未能解决你的问题,请参考以下文章

leetcode.矩阵.378有序矩阵中第K小的元素-Java

LeetCode 每日一题 378. 有序矩阵中第K小的元素

leetcode中等378有序矩阵中第 K 小的元素

leetcode中等378有序矩阵中第 K 小的元素

378. 有序矩阵中第K小的元素。 ①二分

leetcode378 有序矩阵中第k小的元素