【发布时间】:2020-11-16 10:22:39
【问题描述】:
下面的代码是我对以下问题的解决方案:
给定 2 个按升序排序的整数数组,编写一个函数,将这两个数组合并为一个更大的排序数组。例如,给定数组arr1 = [[0, 3, 4, 31] 和arr2 = [4, 6, 30],求解函数应返回数组[0, 3, 4, 4, 6, 30, 31]。
我的解决方案:
function mergeSortedArrays(arr1, arr2) {
// Check input
if (arr1.length === 0 && arr2.length === 0) {
return arr1;
} else if (arr1.length === 0) {
return arr2;
} else if (arr2.length === 0) {
return arr1;
}
// Initialize variables
let i = 0, j = 0;
const mergedArray = [];
// Loop through & compare
while (i < arr1.length && j < arr2.length) {
if (arr1[i] <= arr2[j]) {
mergedArray.push(arr1[i]);
i++;
} else {
mergedArray.push(arr2[j]);
j++;
}
}
if (j < arr2.length) {
while (j < arr2.length) {
mergedArray.push(arr2[j]);
j++;
}
} else if (i < arr1.length) {
while (i < arr1.length) {
mergedArray.push(arr1[i]);
i++;
}
}
return mergedArray; // O(1)
}
上面的解决方案工作正常。但是,我在分析我使用的算法的最坏情况时间复杂度时遇到了一些麻烦。乍一看,它似乎具有线性时间复杂度,O(n),但经过进一步检查,比较两个数组之间元素的第一个循环中的迭代次数并不完全受限于两者中的任何一个的长度数组。更具体地说,它似乎与每个数组的上限和下限有关。
TLDR:上述函数的时间复杂度是多少?
【问题讨论】:
标签: javascript arrays merge time-complexity