leetcode

    xiaoxiao2021-03-26  28

    题意:

    给一个二维数组,表示一个n*n矩阵,每个行和列都升序,找出第k小的数

    分析: 一直找规律,写代码,出错,发现规律出错,再改再写再错...反复多次没法,还是用优先队列吧。只要不停地动态更新k大小的优先队列,就能够选出前k个小的,取出队列头就能得到第k大的。

    public class Solution { public int kthSmallest(int[][] matrix, int k) { PriorityQueue<Integer> pq= new PriorityQueue(k, Collections.reverseOrder()); //从小到大 for(int i=0;i < matrix.length;i++){ for(int j=0;j < matrix.length;j++){ if(pq.size() < k) pq.add(matrix[i][j]); else{ if(pq.peek() > matrix[i][j]){ //有更小的就更新 pq.poll(); pq.offer(matrix[i][j]); } } } } return pq.poll(); } }

    转载请注明原文地址: https://ju.6miu.com/read-660635.html

    最新回复(0)