Merge k Sorted Arrays

Given_k_sorted integer arrays, merge them into one sorted array.

Example

Given 3 sorted arrays:

[
  [1, 3, 5, 7],
  [2, 4, 6],
  [0, 8, 9, 10, 11]
]

return[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].

Solution: Divide conquer.

public List<Integer> mergekSortedArrays(int[][] arrays) {
    List<Integer> res = new ArrayList<Integer>();
    if(arrays.length == 0) {
        return res;
    }
    return divideConquer(arrays, 0, arrays.length - 1);
}
public List<Integer> divideConquer(int[][] arrays, int left, int right) {
    if(left == right) {
        List<Integer> l = new ArrayList<Integer>();
        for(int i = 0; i < arrays[right].length; i++) {
            l.add(arrays[left][i]);
        }
        return l;
    }
    int mid = left + (right - left) / 2;
    List<Integer> first = divideConquer(arrays, left, mid);
    List<Integer> second = divideConquer(arrays, mid + 1, right);
    return merge(first, second);
}
public List<Integer> merge(List<Integer> l1, List<Integer> l2) {
    ArrayList<Integer> res = new ArrayList<Integer>();
    int i = 0, j = 0;
    while(i < l1.size() && j < l2.size()) {
        if(l1.get(i) < l2.get(j)) {
            res.add(l1.get(i));
            i++;
        }
        else {
            res.add(l2.get(j));
            j++;
        }
    }
    while(i < l1.size()) {
        res.add(l1.get(i));
        i++;
    }
    while(j < l2.size()) {
        res.add(l2.get(j));
        j++;
    }
    return res;
}

results matching ""

    No results matching ""