手写数组去重
方法1-判断相邻元素
function _deleteRepeat(arr){if(!Array.isArray(arr)){throw new Error('参数必须是数组')}let res=[];// 使用slice创建arr的副本,并排序let sortArr=arr.slice().sort((a,b)=>a-b);for(let i=0;i<sortArr.length;i++){if(i===sortArr.length-1||sortArr[i]!==sortArr[i+1]){res.push(sortArr[i]);}}return res;
}
//示例
let arr=[1,2,1,2,3,4];
console.log(_deleteRepeat(arr)); //输出[ 1, 2, 3, 4 ]
该函数 _deleteRepeat 的目的是从一个数组中删除重复的元素,同时保持元素的原始顺序。这里是如何工作的:
- 参数检查: 首先检查传入的
arr是否为数组(使用Array.isArray(arr))。如果不是数组,则抛出错误,不执行后续操作。 - 数组复制与排序: 使用
arr.slice()创建原数组的一个浅拷贝,这样做是为了避免直接修改原数组。然后,对这个副本调用sort((a, b) => a - b)进行升序排序。这样可以将相同的元素放在一起,便于后续比较和去重。 - 遍历与去重:
-
- 初始化一个空数组
res,用于存放去重后的结果。 - 遍历排序后的数组
sortArr。
- 初始化一个空数组
-
-
- 对于每个元素,如果它是数组的最后一个元素,或者它与下一个元素不同(
sortArr[i] !== sortArr[i + 1]),则将其添加到结果数组res中。这个判断条件确保了只有当一个元素与其前一个元素不同(在排序后的情况下)时,才会被保留,从而实现了去重。
- 对于每个元素,如果它是数组的最后一个元素,或者它与下一个元素不同(
-
- 返回结果: 遍历结束后,
res数组中就存储了所有去重且保持原始顺序的元素,最后返回这个数组。
示例:
let arr = [1, 2, 2, 3, 4, 4, 4, 5];
console.log(_deleteRepeat(arr)); // 输出: [1, 2, 3, 4, 5]
这个函数有效地去除了数组中的重复元素,同时维持了元素的原始顺序。不过需要注意的是,对于大数组,排序操作可能会导致性能开销较大。如果保留原始顺序的同时追求更高的效率,可以考虑使用其他方法,如使用哈希表来记录元素出现的情况。
还有很多其他实现方式
为了提高性能,可以使用一个对象(或 Set)来跟踪已经看到的元素,从而将时间复杂度降低到 O(n)
在这个改进的版本中,我们直接将 arr 转换为 Set,这将自动去除重复项。然后,我们使用 Array.from(res) 将 Set 转换回数组并返回。
function quChong(arr){if(!Array.isArray(arr)){throw new Error('参数必须是数组')}return [...new Set(arr)];
}
// function quChong(arr) {
// if (!Array.isArray(arr)) {
// return;
// }
// let res = new Set(arr);
// console.log(res) //Set(4) { 1, 2, 3, 4 } 对象集合
// return Array.from(res);
// }
//示例
let arr=[1,2,1,2,3,4];
console.log(quChong(arr)); //输出[ 1, 2, 3, 4 ]相关文章:
手写数组去重
方法1-判断相邻元素 function _deleteRepeat(arr){if(!Array.isArray(arr)){throw new Error(参数必须是数组)}let res[];// 使用slice创建arr的副本,并排序let sortArrarr.slice().sort((a,b)>a-b);for(let i0;i<sortArr.length;i){if(isortArr.length-1||s…...
Firewalld 防火墙
1. 概述 在 RHEL7 系统中,firewalld 防火墙取代了传统的 iptables 防火墙。iptables 的防火墙策略是通过内核层面的 netfilter 网络过滤器来处理的,而 firewalld 则是通过内核层面的 nftables 包过滤框架来处理。firewalld 提供了更为丰富的功能和动态更…...
Hive查询优化 - 面试工作不走弯路
引言:Hive作为一种基于Hadoop的数据仓库工具,广泛应用于大数据分析。然而,由于其依赖于MapReduce框架,查询的性能可能会受到影响。为了确保Hive查询能够高效运行,掌握查询优化技巧至关重要。在日常工作中,高…...
【VUE3】uniapp + vite中 uni.scss 使用 /deep/ 不生效(踩坑记录三)
vite 中使用 /deep/ 进行样式穿透报错 原因:vite 中不支持,换成 ::v-deep 或:deep即可...
容器部署rabbitmq集群迁移
1、场景: 因业务需要,要求把rabbitmq-A集群上的数据迁移到rabbitmq-B集群上,rabbitmq的数据包括元数据(RabbitMQ用户、vhost、队列、交换和绑定)和消息数据,而消息数据存储在单独的消息存储库中。 2、迁移要…...
DP:背包问题----0/1背包问题
文章目录 💗背包问题💛背包问题的变体🧡0/1 背包问题的数学定义💚解决背包问题的方法💙例子 💗解决背包问题的一般步骤?💗例题💗总结 ❤️❤️❤️❤️❤️博客主页&…...
React antd umi 监听当前页面离开,在菜单栏提示操作
需求是我这里有个页面,离开当前页面之后,需要在菜单栏显示个提示,也就是Tour const [unblock, setUnblock] useState<() > void>(() > () > {});const [next, setNext] useState();useEffect(() > {const unblockHandler…...
在 Windows PowerShell 中模拟 Unix/Linux 的 touch 命令
在 Unix 或 Linux 系统中,touch 命令被广泛用于创建新文件或更新现有文件的时间戳。不过,在 Windows 系统中,尤其是在 PowerShell 环境下,并没有内置的 touch 命令。这篇博客将指导你如何在 Windows PowerShell 中模拟 touch 命令…...
鸿蒙NEXT
[中国,东莞,2024年6月24日] 华为开发者大会(HDC)正式开幕,带来全新的 HarmonyOS NEXT、盘古大模型5.0等最创新成果,持续为消费者和开发者带来创新体验。 HarmonyOS NEXT 鸿蒙生态 星河璀璨 鸿蒙生态设备数…...
VUE3-Elementplus-form表单-笔记
1. 结构相关 el-row表示一行,一行分成24份 el-col表示列 (1) :span"12" 代表在一行中,占12份 (50%) (2) :span"6" 表示在一行中,占6份 (25%) (3) :offset"3" 代表在一行中,左侧margin份数 el…...
Analyze an ORA-12801分析并行 parallel 12801 实际原因
"ORA-06512: at "PKG_P_DATA", line 19639 ORA-06512: at "PKG_P_DATA", line 19595 ORA-06512: at "PKG_P_DATA", line 14471-JOB 调用 -ORA-12801: error signaled in parallel query server P009, instance rac2:dwh2 (2) Error: ORA-12…...
高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产mysql数据库事故实战
高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产MySql数据库事故实战 一、前言 作为运维工程师经常会对生产服务器进行安全漏洞加固,一般服务厂商、或者甲方信息安全中心提供一些安全的shell脚本,一般这种shell脚本都是收回权限&…...
昇思25天学习打卡营第09天|sea_fish
打开第九天,本次学习的内容为保存与加载,记录学习的过程。本次的内容少而且简单。 在训练网络模型的过程中,实际上我们希望保存中间和最后的结果,用于微调(fine-tune)和后续的模型推理与部署,因…...
flutter开发实战-Charles抓包设置,dio网络代理
flutter开发实战-Charles抓包设置 在开发过程中抓包,可以看到请求参数等数据,方便分析问题。flutter上使用Charles抓包设置。dio需要设置网络代理。 一、dio设置网络代理 在调试模式下需要抓包调试,所以需要使用代理,并且仅用H…...
Elasticsearch:Runtime fields - 运行时字段(二)
这是继上一篇文章 “Elasticsearch:Runtime fields - 运行时字段(一)” 的续篇。 在查询时覆盖字段值 如果你创建的运行时字段与映射中已存在的字段同名,则运行时字段会隐藏映射字段。在查询时,Elasticsearch 会评估运…...
Python正则表达式的入门用法(上)
Python正则表达式是使用re模块来进行操作的。re模块提供了一组函数,用于进行字符串的匹配和查找操作。 下面是Python中使用正则表达式的一些常用函数: re.search(pattern, string):在字符串中查找并返回第一个匹配的对象。 re.match(patte…...
Audio Processing Graphs 管理 Audio Units
Audio Processing Graphs 管理 Audio Units Audio Processing Graphs 管理 Audio UnitsAudio Processing Graph 拥有精确的 I/O UnitAudio Processing Graph 提供线程安全通过 graph "pull" 音频流 Audio Processing Graphs 管理 Audio Units audio processing grap…...
欧盟,又出了新规-通用充电器新规通用充電器的 RED 修正案如何办理?
欧盟,又出了新规-通用充电器新规通用充電器的 RED 修正案如何办理? 欧盟新规委员会发布《通用充电器指令》指南通用充電器的 RED 修正案办理流程: 2024年5月7日,欧盟委员会发布《通用充电器指令》指南,修订了《无线…...
thinkphp6/8 验证码
html和后台验证代码按官方来操作 ThinkPHP官方手册 注意: 如果验证一直失败,看看Session是否开启, 打印dump(session_status());结果2为正确的, PHP_SESSION_DISABLED: Session功能被禁用(返回值为0)。…...
Ubuntu 22.04 LTS 上安装 MySQL8.0.23(在线安装)
目录 在线安装MySQL 步骤1:更新软件包列表 步骤2:安装MySQL服务器 步骤3:启动MySQL服务 步骤4:检查MySQL状态 步骤5:修改密码、权限 在线安装MySQL 步骤1:更新软件包列表 在进行任何软件安装之前&a…...
Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧
Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧 1. 工具介绍与核心能力 Gemma-3 Pixel Studio是基于Google最新Gemma-3-12b-it模型构建的多模态对话终端,特别擅长处理包含表格的图像数据。与传统OCR工具不同,它不仅能识别…...
Linux 五大 I/O 模型深度解析
在构建高并发、高性能的后端系统时(如各种中间件、Web 服务器),我们不可避免地会接触到 I/O(Input/Output)模型。很多开发者对 BIO、NIO、AIO 以及多路复用等概念感到混淆。要真正从底层掌握这些模型,我们需…...
Mermaid在线编辑器终极指南:免费实时图表创作工具完全解析
Mermaid在线编辑器终极指南:免费实时图表创作工具完全解析 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-ed…...
中山网站建设哪家好?从AI搜索变革看网站建设的规范流程
在讨论“中山网站建设哪家好”之前,有一个更底层的问题需要先理解:👉 网站的价值,正在被AI重新定义。一、信息获取路径正在发生根本变化过去二十年,用户获取信息的方式大致是:用户提出问题 → 打开搜索引擎…...
【AI】可以操控鼠标的智能体
2026-04-02,以下是当前(截至2026年初)可以操作鼠标的AI智能体最新格局,分为操作系统级控制(真鼠标键盘控制)和浏览器级控制两类:第一梯队:操作系统级鼠标控制(全桌面操控…...
假芯片识别与防范:工程师实战指南
1. 假芯片泛滥:半导体行业的隐秘危机最近在调试一块电路板时,我发现一个奇怪的现象:明明使用的是同型号的MCU,但部分板子的功耗异常偏高。经过一周的排查,最终发现问题出在芯片上——我们采购到了一批"套牌"…...
基于BANG语言的Sigmoid算子开发与PyTorch集成实战指南
1. BANG语言与Sigmoid算子开发基础 第一次接触寒武纪BANG语言时,我被它类似CUDA但更简洁的语法设计惊艳到了。这种专为MLU硬件设计的异构编程语言,通过在C/C基础上扩展并行计算特性,让开发者能更高效地利用寒武纪芯片的算力资源。 BANG核心语…...
Grove-I2C颜色传感器驱动开发与RGB色彩识别实践
1. Grove-I2C颜色传感器技术解析与嵌入式驱动开发实践 1.1 模块硬件架构与传感原理 Grove-I2C颜色传感器模块基于TAOS(现为ams OSRAM)TCS3414CS高精度数字颜色传感器芯片设计,其核心传感单元由16个微型光电二极管阵列构成,呈82物…...
G-Helper终极指南:华硕笔记本轻量级控制工具完全教程
G-Helper终极指南:华硕笔记本轻量级控制工具完全教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sca…...
OpenClaw自动化测试:千问3.5-27B驱动UI全流程验证
OpenClaw自动化测试:千问3.5-27B驱动UI全流程验证 1. 为什么选择OpenClaw做自动化测试? 去年接手一个前端重构项目时,我遇到了一个典型困境:每次代码改动后,都需要手动执行47个关键页面的功能测试。这套测试流程完整…...
