JS 【详解】双指针排序 -- 数组合并后递增排序

server/2024/9/24 4:28:21/

时间复杂度为 O(m + n) ,可简称为 O(n)

排序流程

  1. 在两个数组中,从第一项开始,各自设一个指针
  2. 将两指针对应的元素进行比较,将较小的放入最终数组中,若两元素相同,就都放入最终数组中,若有一个指针没有数据,则将有数据的指针放入最终数组中
  3. 比较完成后,移除元素的数组的指针右移,直至两个指针都不再有元素。

代码实现

function twoPointerSort(arr1, arr2) {const result = [];let i = 0;let j = 0;// 只要 arr1 或 arr2 还有值,就继续循环while (arr1[i] != null || arr2[j] != null) {const v1 = arr1[i];const v2 = arr2[j];// arr1 和 arr2 都没有值了,则停止if (v1 == null && v2 == null) {break;}if (v1 < v2 || v2 == null) {// v1 较小,则只拼接 v1result.push(v1);i++;}if (v1 > v2 || v1 == null) {// v2 较小,则只拼接 v2result.push(v2);j++;}if (v1 === v2) {// v1 v2 相等,则都拼接result.push(v1);i++;result.push(v2);j++;}}return result;
}

测试效果

const arr1 = [1, 3, 5, 7, 9];
const arr2 = [2, 4, 6, 8];const finalArray = twoPointerSort(arr1, arr2);console.log(finalArray);

结果

[ 1, 2, 3, 4, 5, 6, 7, 8, 9]

为什么不用 concat + sort 实现 ?

因为时间复杂度高,至少是 O(n*logn)

const res = arr1.concat(arr2).sort((a, b) => a - b)
console.log(res)

http://www.ppmy.cn/server/46414.html

相关文章

【LeetCode 77. 组合】

1. 题目 2. 分析 本题有个难点在于如何保存深搜得到的结果&#xff1f;总结了一下&#xff0c;深搜处理的代码&#xff0c;关于返回值有三大类。 第一类&#xff1a;层层传递&#xff0c;将最深层的结果传上来&#xff1b;这类题有&#xff1a;【反转链表】 第二类&#xff1…

Git使用规范及命令

文章目录 一、Git工作流二、分支管理三、Git命令操作规范1. 切到develop分支&#xff0c;更新develop最新代码2. 新建feature分支&#xff0c;开发新功能3. 完成feature分支&#xff0c;合并到develop分支4. 当某个版本所有的 feature 分支均合并到 develop 分支&#xff0c;就…

前端最新面试题(基础模块HTML/CSS/JS篇)

目录 一、HTML、HTTP、WEB综合问题 1 前端需要注意哪些SEO 2 img的title和alt有什么区别 3 HTTP的几种请求方法用途 4 从浏览器地址栏输入url到显示页面的步骤 5 如何进行网站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍一下你对浏览器内核的理解? 9 html…

Oracle 创建DBLink

一、查询是否具有创建DBLink的权限select * from user_sys_privs where privilege like upper(%DATABASE LINK%); 二、如果没有&#xff0c;则需要使用 sysdba 角色给用户赋权grant create public database link to dbusername; 三、创建dblink -- 如果创建全局 dblink&am…

Unity之如何使用Localization来实现文本+资源多语言

前言 使用Unity实现本地化&#xff08;Localization&#xff09;功能 在当今的游戏开发中&#xff0c;支持多语言已成为一项基本需求。Unity作为主流的游戏开发引擎&#xff0c;提供了强大的本地化工具&#xff0c;使开发者能够方便地为游戏添加多语言支持。本文将介绍如何在U…

学习整理 docker

nexus 搭建nexus将其他pom、jar导入到nexus中

JavaScript第五讲:事件,条件循环语句,错误处理

前言 在编程的世界里&#xff0c;事件、条件和循环语句、以及错误处理是构建任何复杂程序或应用的基石。无论是开发一个简单的网页交互&#xff0c;还是构建一个庞大的企业级系统&#xff0c;这些基础概念都扮演着至关重要的角色。今天星途将通过这篇文章&#xff0c;分别深入…

DxO PhotoLab 6 for Mac/Win:专业RAW图片编辑的利器

DxO PhotoLab 6 for Mac/Win是一款专为摄影师和摄影爱好者打造的专业RAW图片编辑软件&#xff0c;它将先进的技术、丰富的功能与直观的操作完美结合&#xff0c;为用户提供了一款全面而强大的图片处理工具。 一、技术领先&#xff0c;处理RAW图片更高效 DxO PhotoLab 6采用了…