题意:
给一个二维数组,表示一个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();
}
}