Vous avez besoin d'un conteneur qui contiendra l'élément k
e du tableau i
e, l'indice et l'indice i
k
.
public class Node {
int item, arrIndx, itemIndx;
public Node(int a, int b, int c) {
this.item = a;
this.arrIndx = b;
this.itemIndx = c;
}
}
Utilisez une minHeap (File d'attente prioritaire qui maintiennent triée son élément dans l'ordre croissant) pour contenir le Node
.
Au début de chaque tableau, placez son premier élément dans le minHeap. Comment minHeap détient les premiers éléments triés n
.
Maintenant, placez l'élément frontal du minHeap un par un qui est le plus petit parmi tous les éléments de tableaux et placez-le dans le tableau de sortie. Pendant le lancement de tout élément k
du tableau i
, placez l'élément k + 1
ème élément du tableau i
dans la file d'attente. De cette façon, nous nous assurons, nous poussons le plus petit élément immédiat du plus petit élément actuel.
Continuez ce processus jusqu'à ce que tous les éléments de tableaux soient poussés et extraits du minHeap.
extrait de l'échantillon Java ressemblera à ceci:
public List<Integer> mergekSortedArrays(int[][] arrays) {
List<Integer> result = new ArrayList<Integer>();
if (arrays == null || arrays.length == 0) {
return result;
}
PriorityQueue<Node> minHeap = new PriorityQueue<Node>(arrays.length,
new Comparator<Node>() {
public int compare(Node lhs, Node rhs) {
return lhs.item - rhs.item;
}
}
);
// O(n log n)
for (int i = 0; i < arrays.length; i++) {
if (arrays[i].length > 0) {
minHeap.offer(new Node(arrays[i][0], i, 0));
}
}
Node node;
// O((N - n)log n)
while (!minHeap.isEmpty()) {
node = minHeap.poll();
result.add(node.item);
if (node.itemIndx + 1 < arrays[node.arrIndx].length) {
minHeap.offer(new Node(arrays[node.arrIndx][node.itemIndx + 1], node.arrIndx, node.itemIndx + 1));
}
}
return result;
}
La complexité de temps est O(N log n)
où n
est le nombre de tableau et N
est le nombre de tous les éléments dans ces tableaux.
Cela ne peut pas être fait en moins que le total des éléments dans tous les tableaux. Évidemment, vous devez lire chacun des éléments dans tous les tableaux. –