# 378. Kth Smallest Element in a Sorted Matrix

64人阅读 评论(0)

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.

    public int kthSmallest(int[][] matrix, int k) {
int m = matrix.length;
if (m == 0)
return 0;
int n = matrix[0].length;
int cnt = 0;
boolean[][] used = new boolean[m][n];
PriorityQueue<kthsNode> heap = new PriorityQueue<kthsNode>();
used[0][0] = true;
kthsNode node = null;
int[] xoff = { 0, 1 };
int[] yoff = { 1, 0 };
while (cnt < k) {
node = heap.poll();
int x = node.x;
int y = node.y;
for (int i = 0; i < 2; i++) {
int xx = x + xoff[i];
int yy = y + yoff[i];
if (xx >= 0 && xx < m && yy >= 0 && yy < n && !used[xx][yy]) {
used[xx][yy] = true;
}
}
cnt++;
}
return node.val;
}
static class kthsNode implements Comparable<kthsNode> {
int x, y;
int val;
public kthsNode(int x, int y, int val) {
this.x = x;
this.y = y;
this.val = val;
// TODO Auto-generated constructor stub
}

@Override
public int compareTo(kthsNode o) {
// TODO Auto-generated method stub
return val - o.val;
}


0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：37135次
• 积分：555
• 等级：
• 排名：千里之外
• 原创：177篇
• 转载：21篇
• 译文：0篇
• 评论：4条
文章分类
阅读排行
评论排行
最新评论