要合并两个从小到大排好序的数组,并保持合并结果从小到大的顺序,可以使用双指针法。这种方法的时间复杂度为 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)。
网友回复
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?