Kth smallest elment in sorted Matrix

Find the kth smallest number in at row and column sorted matrix. Example Given k = 4 and a matrix:

[
  [1 ,5 ,7],
  [3 ,7 ,8],
  [4 ,8 ,9],
]

return 5

解题思路:Min Heap

1) Build a min heap which takes O(n) time

2) Heapify k times which takes O(kLogn) time.

Therefore, overall time complexity is O(n + kLogn) time.

public int kthSmallest(final int[][] matrix, int k) {
    int m = matrix.length, n = matrix[0].length;
    boolean[][] visited = new boolean[m][n];

    PriorityQueue<int[]> queue = new PriorityQueue<int[]>(k, new Comparator<int[]>(){
        public int compare(int[] a, int[]b){
            return matrix[a[0]][a[1]] - matrix[b[0]][b[1]];
        }
    });

    queue.add(new int[]{0,0});
    visited[0][0] = true;

    while(k > 1){
        int[] res = queue.poll();
        k--;
        int x = res[0];
        int y = res[1];
        if(x+1 < m && visited[x+1][y] == false){
            queue.add(new int[]{x+1, y});
            visited[x+1][y] = true;
        }

        if(y+1 < n && visited[x][y+1] == false){
            queue.add(new int[]{x, y+1});
            visited[x][y+1] = true;
        }
    }

    int[] res = queue.poll();
    return matrix[res[0]][res[1]];
}

results matching ""

    No results matching ""