378.有序矩阵中第k小的元素

1.题目描述:

  给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
  请注意,它是排序后的第k小元素,而不是第k个元素。

  题目链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/

 

2.解题思路及代码:

  构造一个最多容纳m个元素的优先队列,遍历矩阵,将矩阵的值加入优先队列中,若优先队列元素超过m,则将队首弹出,由于java优先队列默认升序排列,遍历结束后队首便是第m大的元素。

  题目要求求第k小元素,即第n*n-k+1大的元素

  代码如下:

  

class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        int num=matrix.length*matrix[0].length-k+1;
        Queue<Integer> q = new PriorityQueue<>();
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix[0].length;j++) {
                q.add(matrix[i][j]);
                if(q.size()>num)
                    q.poll();
            }
        }
        return q.peek();
    }
}

 

posted @ 2019-11-04 20:01  teensSpirit  阅读(97)  评论(0编辑  收藏  举报