坚持第40天啦,加油加油!!
题目
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。
示例 1:
输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8
输出:13
解释:矩阵中的元素为 [1,5,9,10,11,12,13,13,15],第 8 小元素是 13
示例 2:
输入:matrix = [[-5]], k = 1
输出:-5
代码
class Solution {
public int kthSmallest(int[][] matrix, int k) {
if(matrix==null)
return -1;
PriorityQueue<Integer> pq=new PriorityQueue<Integer>(new Comparator<Integer>()
{
public int compare(Integer a,Integer b)
{
return a-b;
}
});
for(int i=0;i<matrix.length;i++)
for(int j=0;j<matrix[0].length;j++)
{
pq.offer(matrix[i][j]);
}
for(int i=0;i<k-1;i++)
pq.poll();
return pq.peek();
}
}
反思
其实,还有很多改进算法,比如,建立最大堆,堆的尺度是K,将大的删除,即可。