要合并两个从小到大排好序的数组,并保持合并结果从小到大的顺序,可以使用双指针法。这种方法的时间复杂度为 O(m+n),其中 m 和 n 分别是两个数组的长度。
以下是实现该算法的 JavaScript 代码:
function mergeSortedArrays(arr1, arr2) { let mergedArray = []; let i = 0, j = 0; // 遍历两个数组,直到其中一个数组的所有元素都被处理完 while (i < arr1.length && j < arr2.length) { if (arr1[i] <= arr2[j]) { mergedArray.push(arr1[i]); i++; } else { mergedArray.push(arr2[j]); j++; } } // 如果 arr1 还有剩余元素,将其全部添加到 mergedArray 中 while (i < arr1.length) { mergedArray.push(arr1[i]); i++; } // 如果 arr2 还有剩余元素,将其全部添加到 mergedArray 中 while (j < arr2.length) { mergedArray.push(arr2[j]); j++; } return mergedArray; } // 示例 const arr1 = [1, 3, 8]; const arr2 = [2, 3, 9]; const mergedArray = mergeSortedArrays(arr1, arr2); console.log(mergedArray); // 输出: [1, 2, 3, 8, 9]解释初始化:创建一个空数组 mergedArray 用于存储合并后的结果,并初始化两个指针 i 和 j 分别指向两个输入数组的起始位置。遍历两个数组:使用 while 循环遍历两个数组,直到其中一个数组的元素全部被处理完。在每次循环中,比较两个指针所指向的元素,将较小的元素添加到 mergedArray 中,并将相应的指针向后移动一位。处理剩余元素:如果其中一个数组的所有元素已经处理完,而另一个数组还有剩余元素,则将剩余元素全部添加到 mergedArray 中。返回结果:最后返回合并后的数组 mergedArray。
这种方法确保了每个元素只被比较一次,因此时间复杂度为 O(m+n)。
网友回复