3种时间复杂度实现不同类型的无序数组去重
我爱撸码,撸码使我感到快乐!
大家好,我是Counter。
今天来实现下,js中不同类型的无序数组去重,代码都写好了,基本都注释了。今天先上代码吧。
arr是我自己自定义的一个数组。这种去重的时间复杂度为O(n²),因为它进行了2次长度为n的循环。第一种代码如下:
// 定义一个数组var arr = [ 1, 2, 3, 4, 5, 3, 2, 5, 6, 7, 8, "1", {a: 1, b: 2}];// 时间复杂度为O(n²);function one(arr) {// 定义一个空数组var newArr = [];// 遍历数组for( key of arr) {// in -> 索引值,of -> 具体元素// console.log(key);// 如果这个空数组里没有这个元素的话,就给它添加上if ( newArr.indexOf(key) === -1) {newArr.push(key);}}// 结果返回return newArr;}
第一种方法的效果如下:
第二种方法,时间的复杂度为O(nlogN),因为它对数组进行排序了,这种方法会改变原有数组的排序。如果不在乎就没事,如果在乎就不能使用这种方法。第二种代码如下:
// 时间复杂度为O(nlogN),不过这查重会导致不会安装原有的数组进行排序,即不稳定性,如果不在乎数组的排序,也可以,不影响,如果在乎就不行了function two(arr) {// 创建空数组var newArr = [];// 对数组排序 arr.sort();// 遍历数组for( var i = 0; i < arr.length; i++) {// 如果当前的这个元素不等于下一个元素if ( arr[i] !== arr[i+1] ) {// 那么将这个元素插入到新数组 newArr.push(arr[i]);}}return newArr;}
第二种效果如下:
第三种方法,运用到了ES6的集合对象,时间复杂度为O(n)。
第三种代码给出:
// 时间复杂度为O(n) ,利用ES6里的Set集合对象,它返回的是一个集合,不重复的function three(arr) {// 创建一个集合对象var set = new Set(arr);// 把集合再传回去,再转成数组return Array.from(set);}
第三种效果如下:
转载于:https://www.cnblogs.com/Counterrr/p/10639965.html
3种时间复杂度实现不同类型的无序数组去重相关推荐
- 在一个无序的int数组上构建一个最小堆的时间复杂度_漫画:寻找无序数组的第k大元素(修订版)...
----- 第二天 ----- 题目是什么意思呢?比如给定的无序数组如下: 如果 k=6,也就是要寻找第6大的元素,这个元素是哪一个呢? 显然,数组中第一大的元素是24,第二大的元素是20,第三大的元 ...
- 原生JS数组去重的几种方法
有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...
- 求无序数组的第K(大/小)数的三种方法
题目描述:给定一个无序数组(长度为n)和一个正整数 K,让你求此数组中第K大的数 方法1:最简单的思路,你肯定会想到 先把数组排序,然后再取下标为K的对应数组元素.这种方法肯定是可行的,但是这种方法无 ...
- 最新字节跳动面试题与答案: 无序数组的中位数 (快排思想O(N) 时间复杂度)
最新字节跳动面试题与答案 1.算法题一:无序数组的中位数 (快排思想O(N) 时间复杂度) package com.lightsword.leetcodeproblemsimport org.juni ...
- linux文件类型elf,[Linux]四种ELF对象文件类型
ELF(Executable and Linking Format)是一种对象文件(.o or .obj,目标文件)的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及 ...
- html的文档类型三种,XHTML文档类型
xhtml1.0支持三种DTD(文档类型定义)声明:过渡性(Transitional).严格型(Strict)和框架型(Frameset). 过渡型 过渡型文档类型对于标签和属性的语法要求不是很严格, ...
- 第一句就是定义了一种ptrfun的C++类型
第一句就是定义了一种ptrfun的C++类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型.*/char glfun(int a){return;}void mai ...
- selenium 三种断言以及异常类型
selenium 三种断言以及异常类型 参考文章: (1)selenium 三种断言以及异常类型 (2)https://www.cnblogs.com/xiaobucainiao/p/6186826. ...
- 两种依赖注入的类型是什么?
两种依赖注入的类型分别是setter注入和构造方法注入. setter注入: 一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下: pu ...
- 口腔微生物输入量的差异决定了与健康状况相关的两种微生物群肺炎类型
口腔微生物输入量的差异决定了与健康状况相关的两种微生物群肺炎类型 〉原文:Differential Oral Microbial Input Determines Two Microbiota Pne ...
最新文章
- win7虚拟机黑苹果_关于最近折腾黑苹果的一些心得分享
- BZOJ3743 COCI2015Kamp(树形dp)
- scala 函数中嵌套函数_如何在Scala中将函数转换为部分函数?
- Asp.Net MVC5入门学习系列⑥
- 怎样让计算机快速开机,怎样设置可以让电脑快速启动开机.doc
- Stream上传插件(Java接口实现)
- 测试的目的、时期、分类
- ssr客户端android!Android开发真等于废人?看看这篇文章吧!
- 利用selenium 实现对百度图片搜索中的图片的抓取
- Python-Selennium之爬虫实战--链家二手房爬虫项目
- Silverlight载入动画(简易)
- Steve Yegge:Google面试秘籍
- android 定制ROM集成 YouTube API,并实现双屏异显(主屏展示列表,副屛播放视频)
- Win10上如何显示本地lrc文件歌词——lrc播放器——《超级lrc播放器》
- String StringBuffer StringBuilber
- PCIE TLP 写中断
- ios中在app应用内刷新小组件数据
- 社保公积金提取转移手续
- linux命令行蜂鸣声太大,在Linux Gnome系统上关闭终端的硬件蜂鸣声的方法
- 南京邮电大学计算机数据结构考研真题,南京邮电大学考研数据结构真题.pdf
热门文章
- SPSS PROCESS插件安装及使用【SPSS 046期】
- laravel 除了主页 都是404 webconfig_通过 Laravel 创建一个 Vue 单页面应用(六)
- ai面向分析_2020年面向企业的顶级人工智能平台
- 若泽数据 巨人_面部识别巨人拒绝分享有关其算法数据集的详细信息
- 脸部识别算法_面部识别技术是种族主义者吗? 先进算法的解释
- opencv3.4.x和opencv4.x中 cv2.findContours的不同 ValueError: too many values to unpack (expected 2)
- linux汇编section标签,Linux内核中常用的汇编
- 锁相环环路滤波器计算公式_锁相环和射频振荡器简介
- latex转为html效果好吗,latex转HTML
- Confluence 6 使用 Decorator 宏