合并N个有序数组:
public static List<Integer> mergeNArrays(int n, List<List<Integer>> list) {
List<Integer> res = new ArrayList<>();
// 数组idx,值idx,值
PriorityQueue<int []> pq = new PriorityQueue<>((a, b) -> a[2] - b[2]);
for (int i = 0; i < n; i++) {
if (!list.get(i).isEmpty()) {
pq.offer(new int[]{i, 0, list.get(i).get(0)});
}
}
while (!pq.isEmpty()) {
int []smallest = pq.poll();
int arrayIdx = smallest[0];
int idx = smallest[1];
res.add(smallest[2]);
if (idx < list.get(arrayIdx).size() - 1) {
idx++;
pq.offer(new int[]{arrayIdx, idx, list.get(arrayIdx).get(idx)});
}
}
return res;
}