Please review my answer for this interview question: Merge k sorted arrays, using min heap.
import java.util.*;
public class MinHeap{
public static class HeapItem implements Comparable<HeapItem>{
int[] array;
int index; // the index of current element
public HeapItem(int[] arr, int index) {
array = arr;
index = 0;
}
@Override
public int compareTo(HeapItem h){
if(array[index] > h.array[h.index]){
return 1;
}else if(array[index] < h.array[h.index]){
return -1;
}else{
return 0;
}
}
}
public static List<Integer> mergeArrays(int[][] arrays) {
if (arrays == null || arrays.length == 0) {
throw new IllegalArgumentException("Invalid input!");
}
// priority queue is heap in Java
PriorityQueue<HeapItem> pq = new PriorityQueue<HeapItem>();
// add arrays to the heap
for (int i = 0; i < arrays.length; i++) {
pq.add(new HeapItem(arrays[i], 0));
}
List<Integer> result = new ArrayList<Integer> ();
while (!pq.isEmpty()) {
HeapItem current = pq.remove();
result.add(current.array[current.index]);
if (current.index < current.array.length-1) {
pq.add(new HeapItem(current.array, current.index+1));
}
}
return result;
}
public static void main(String[] args){
int[] arr1 = {1, 3, 5, 7};
int[] arr2 = {2, 4, 6, 8};
int[] arr3 = {0, 9, 10, 11};
System.out.println(mergeArrays(new int[][] {arr1, arr2, arr3}));
}
}
index = 0;
bythis.index = index;
it works. I'll edit it. – Hengameh Aug 16 '15 at 3:26arrays.reduce(merge)
. While simpler I fear time complexity may be worse – Caridorc Aug 16 '15 at 10:08