Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.
Note that it is the kth smallest element in the sorted order, not the kth distinct element.
Example:
matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k = 8, return 13.
Note:
You may assume k is always valid, 1 ≤ k ≤ n2.
求第k个最小值,用一个最大堆实现。程序如下所示:
class Solution {
public int kthSmallest(int[][] matrix, int k) {
int row = matrix.length, col = matrix[0].length;
PriorityQueue<Integer> priorityQue = new PriorityQueue<>(10, new Comparator<Integer>(){
@Override
public int compare(Integer v0, Integer v1){
return v1 - v0;
}
});
for (int i = 0; i < row; ++ i){
for (int j = 0; j < col; ++ j){
if (priorityQue.size() < k){
priorityQue.offer(matrix[i][j]);
}
else if (priorityQue.peek() > matrix[i][j]){
priorityQue.poll();
priorityQue.offer(matrix[i][j]);
}
}
}
return priorityQue.peek();
}
}