Leetcode 378. Kth Smallest Element in a Sorted Matrix

O(mlogn), m is number of columns and n is number of rows.

O(m*n) space.

Merge the matrix into an array, return kth element.

public class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        if (matrix == null || matrix.length == 0) {
            return 0;
        }
        
        int[] res = divideConquer(0, matrix.length-1, matrix);
        return res[k-1];
    }
    
    private static int[] divideConquer(int start, int end, int[][] matrix) {
        if (start == end) {
            return matrix[start];
        }
        
        int mid = (end-start)/2+start;
        int[] a1 = divideConquer(start, mid, matrix);
        int[] a2 = divideConquer(mid+1, end, matrix);
        
        return merge(a1, a2);
    }
    
    private static int[] merge(int[] a1, int[] a2) {
        int[] res = new int[a1.length+a2.length];
        int i=0, j=0, k=0;
        while (i


Using heap. A max heap to save k smallest elements, return top of the heap after iteration. 

public class Solution {
    public int kthSmallest(int[][] matrix, int k) {
        PriorityQueue maxHeap = new PriorityQueue(
            new Comparator () {
                public int compare (Integer a, Integer b) {
                    return b - a;
                } 
            });
            
        for (int i=0; i



你可能感兴趣的:(Leetcode,Heap,Divide,and,Conquer)