合并二维有序数组成一维有序数组的核心是合并有序的一维数组,声明变量 answer 为最终的合并结果,其初始值为 arr[0]。
第一步将 arr[1] 合并到 answer, 第二步将 arr[2] 合并到 answer,回到 arr 中的所有一维数组合并到 answer。
ts
function mergeArr(arr: number[][]):number[] {
if(arr.length === 0) return[]
const answer: number[] = [...arr[0]]
const len = arr.length
let index = 1
// 合并两个有序一维数组
const merge = (origin: number[],target:number[]) => {
let i = origin.length - 1,j = target.length - 1
target.push(...new Array(origin.length))
let targetIndex = target.length - 1,cur
while(i >= 0 || j >= 0) {
let cur: number = origin[i]
if(i < 0) {
cur = target[j]
j--
} else if(j < 0) {
cur = origin[i]
i--
} else if(origin[i] >= target[j]) {
cur = origin[i]
i--
} else if(origin[i] < target[j]) {
cur = target[j]
j--
}
target[targetIndex] = cur
targetIndex--
}
}
while(index < len) {
merge(arr[index],answer)
index++
}
return answer
}