以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
81. 合并已排序的数组
解答:
题目要求合并已排序的数组,我们可以用归并排序的思想,将多个有序数组合并成一个有序数组。
具体实现可以用类似于归并排序合并两个有序数组的思路,把所有输入的数组按顺序两两配对合并,直到最终只剩下一个数组为止。
具体代码实现如下:
function merge(arrays) {
while (arrays.length > 1) {
const temp = []
for (let i = 0; i < arrays.length; i += 2) {
const merged = []
let left = arrays[i]
let right = arrays[i + 1]
if (!left || !right) {
temp.push(left || right)
continue
}
let l = 0
let r = 0
while (l < left.length || r < right.length) {
if (l === left.length) {
merged.push(right[r])
r++
} else if (r === right.length) {
merged.push(left[l])
l++
} else if (left[l] <= right[r]) {
merged.push(left[l])
l++
} else {
merged.push(right[r])
r++
}
}
temp.push(merged)
}
arrays = temp
}
return arrays[0] || []
}
时间复杂度为O(N*log(M)),其中N是所有输入数组的总个数,M是每个输入数组的平均长度。空间复杂度为O(N+M)。