378 Kth Smallest Element in a Sorted Matrix
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
return 13.Solutions:
public class Solution {
private class Entry implements Comparable<Entry> {
private int val;
private int i;
private int j;
public Entry(int val, int i, int j) {
this.val = val;
this.i = i;
this.j = j;
}
public int compareTo(Entry e) {
return this.val - e.val;
}
}
public int kthSmallest(int[][] matrix, int k) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return 0;
}
HashSet<String> visited = new HashSet<String>();
int m = matrix.length, n = matrix[0].length;
PriorityQueue<Entry> q = new PriorityQueue<Entry>();
q.add(new Entry(matrix[0][0], 0, 0));
visited.add("0,0");
while (k > 1) {
Entry cand = q.poll();
if (cand.i + 1 < m && !visited.contains((cand.i + 1) + "," + cand.j)) {
q.add(new Entry(matrix[cand.i + 1][cand.j], cand.i + 1, cand.j));
visited.add((cand.i + 1) + "," + cand.j);
}
if (cand.j + 1 < n && !visited.contains(cand.i + "," + (cand.j + 1))) {
q.add(new Entry(matrix[cand.i][cand.j + 1], cand.i, cand.j + 1));
visited.add(cand.i + "," + (cand.j + 1));
}
k --;
}
return q.poll().val;
}
}Last updated