当前位置: 首页 > news >正文

数组去重的几种方式

1、数组去重的几种方式(转载链接)

方法1:使用Set + Array

function uniqueArray(arr){
    return Array.from(new Set(arr));
}
复制代码

优点:代码简洁,速度快,时间复杂度为O(N)

缺点:需要一个额外的Set和Array的存储空间,空间复杂度为O(N)

方法2:使用splice

function uniqueArray(arr){
    for(var i = 0; i < arr.length - 1; i++){
        for(var j = i + 1; j < arr.length; j++){
            if(arr[j] === arr[i]){
                arr.splice(j--, 1);
            }
        }
    }
    return arr;
}
复制代码

优点:不需要使用额外的存储空间,空间复杂度为O(1)
缺点:需要频繁的内存移动,双重循环,时间复杂度为O(N2)

方法3:只用Array

function uniqueArray(arr){
    var retArray = [];
    for(var i = 0; i < arr.length; i++){
        if(retArray.indexOf(arr[i]) < 0){
            retArray.push(arr[i]);
        }
    }
    return retArray;
}复制代码

时间复杂度为O(N2),空间复杂度为O(N)

方法4:使用Object + Array


和方法三的区别在于,它不再是使用Array.indexOf判断是否已存在,而是使用Object[key]进行哈希查找,所以它的时间复杂度为O(N),空间复杂为O(N).

总结:Object + Array最省时间,splice的方式最耗时(它比较省空间),Set + Array的简洁方式在数据量大的时候时间将明显少于需要O(N2)的Array,同样是O(N2)的splice和Array,Array的时间要小于经常内存移动操作的splice。


相关文章:

  • go语言打造个人博客系统(一)
  • 糟心的两个月
  • Function()构造函数与函数直接量
  • 「PKUWC2018」猎人杀
  • Object 类有哪些方法
  • 为了使用好Apache Flink,Yelp实现了一个连接算法
  • C++多态
  • MariaDB 数据库
  • 应用调试(三)oops
  • 谷歌是 CNCF 开源项目最大贡献者,红帽次之
  • 海南“多规合一”改革促行政审批提速城乡面貌提质
  • jmap命令 Java Memory Map
  • 服务器从安装到部署全过程(二)
  • 对APP单例的统一封装(常规式)
  • 优化关键渲染路径
  • 【译】JS基础算法脚本:字符串结尾
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • C# 免费离线人脸识别 2.0 Demo
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES6核心特性
  • iOS编译提示和导航提示
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Node项目之评分系统(二)- 数据库设计
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue.js源码(2):初探List Rendering
  • vue-router 实现分析
  • win10下安装mysql5.7
  • XForms - 更强大的Form
  • 分享几个不错的工具
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 老板让我十分钟上手nx-admin
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 世界上最简单的无等待算法(getAndIncrement)
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 阿里云服务器购买完整流程
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (C语言)fgets与fputs函数详解
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (循环依赖问题)学习spring的第九天
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET基础篇——反射的奥妙
  • .NET建议使用的大小写命名原则
  • .Net接口调试与案例
  • /var/log/cvslog 太大
  • ::
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @media screen 针对不同移动设备
  • @Resource和@Autowired的区别
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [CQOI 2010]扑克牌