Merge K Sorted Arrays

class Element{
    public int row, col, val;
    Element(int row, int col, int val) {
        this.row = row;
        this.col = col;
        this.val = val;
    }
}


public class Solution {
    /**
     * @param arrays: k sorted integer arrays
     * @return: a sorted array
     */
     
     private Comparator<Element> ElementComparator = new Comparator<Element> () {
         public int compare(Element left, Element right) {
             return left.val - right.val;
         }
     };
     
    public int[] mergekSortedArrays(int[][] arrays) {
        // write your code here
        if(arrays == null) {
            return new int[0];
        }
        
        int total_size = 0;
        Queue<Element> Q = new PriorityQueue<Element> (arrays.length, ElementComparator);
        
        for(int i = 0; i < arrays.length; i++) {
            if(arrays[i].length > 0) {
                Element elem = new Element(i, 0, arrays[i][0]);
                Q.add(elem);
                total_size += arrays[i].length;
            }
        }
        
        int[] result = new int[total_size];
        int index = 0;
        while(!Q.isEmpty()) {
            Element elem = Q.poll();
            result[index++] = elem.val;
            if(elem.col + 1 < arrays[elem.row].length) {
                elem.col += 1;
                elem.val = arrays[elem.row][elem.col];
                Q.add(elem);
            }
        }
        
        return result;
    }
}

最后更新于

这有帮助吗?