面试题——4种数组去重的方法

数组去重或者其衍生作为笔试题或者机试题出现的几率也是很大的,写出的方法越多,则让面试官觉得你思维越开阔,那么成功的几率当然就大了。

废话不多说,下面来说说下面我整理的4中数组去重的方法

方法一: findInArr方法+select方法组合

  findInArr : 查找一个数在当前数组中是否存在,存在返回true,找完所有没有找到,返回false,这个数就是我们要操作的那个数组

  select      :循环数组,并调用findInArr方法 查找当前arr[i]在arr2中是否存在,如果返回false 那么就把当前这个数 arr[i] ,push到新的数组 arr2中,最后return arr2

 1 function findInArr(n ,arr){
 2     for (var i = 0; i < arr.length; i++) {
 3         if (n == arr[i]) {
 4             return true;
 5         }
 6     }
 7     return false;
 8 }
 9 function select (arr){
10     var arr2 = [];
11     for(var i = 0; i < arr.length; i++){
12         if (!findInArr(arr[i],arr2)) {
13             arr2.push(arr[i]);
14         }
15     }
16     return arr2;
17 }
View Code

方法二 :利用json特性 

  创建一个空的json,通过对key的检索,---> !json[arr[i]],取反说明不存在

  这样我们可以对其进行赋值,json[arr[i]] = true;  对于 赋什么值,随意,保证它的键值对就行

  并且把当前这个数push 或者其他方式都行 ,总是添加到新数组 arr2中,最后return arr2

 1 function select (arr){
 2     var json = {};
 3     var arr2 = [];
 4     for (var i = 0; i < arr.length; i++) {
 5         if (!json[arr[i]]) {
 6             json[arr[i]] = true;
 7             arr2.push(arr[i])
 8         }
 9     }
10     return arr2;
11 }
View Code

方法三: 相邻数比较法,这个方法前提是先用sort 进行简单排序,不需要改进版的

  经过sort排序之后,我们不论它排序是否正确,但是有一点我们能确定,那就是相同的一定被排到了一起

  那么我们对排序之后的数组遍历,并且让当前的数和下一个数进行比较,如果相等那么用splice(i,1) 方法对其进行删除,这时候i的值需要 i--,避免它少比一次,最后return arr;

 1 function select(arr){
 2     arr.sort();
 3     for (var i = 0; i < arr.length; i++) {
 4         if (arr[i] == arr[i+1]) {
 5             arr.splice(i,1)
 6             i--;
 7         }
 8     }
 9     return arr;
10 }
View Code

方法四:使用数组的indexOf方法 (IE8--不兼容)

  通过判断arr2.indexOf(arr[i]) == -1 ,来确定新数组arr2中没有arr[i],并将其添加到数组arr2中,最终返回 arr2

1 function select (arr){
2     var arr2 = [];
3     for( var i = 0; i < arr.length; i++){
4         if (arr2.indexOf(arr[i]) == -1) {
5             arr2.push(arr[i])
6         }
7     }
8     return arr2;
9 }
View Code

  上述四中方法肯定存在的性能的差异,可以从速度上,所占内存等进行比较,我没有测过所以就不妄加定论。希望测过的朋友,能告知 。谢谢

转载于:https://www.cnblogs.com/NTWang/p/6246621.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFc消息映射机制理解

何谓消息、消息处理函数、消息映射&#xff1f;消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。在SDK中消息其实非常容易理解&#xff0c;当窗口建立后便会有一个函数&#xff08;窗口处理函数&#xff09;开…

Effective C++ 条款11:在operator=中处理自我赋值

”自我赋值”发生在对象被赋值给自己时: class Widget { ... }; Widget w; ... w w; // 赋值给自己 a[i] a[j]; // 潜在的自我赋值 *px *py; // 潜在的自我赋值class Base { ... }; class Derived: public Base { ... }; void doS…

Demosaic算法学习

一、概述 由于成本和面积等因素的限定,CMOS图像传感器在成像时,感光面阵列前通常会有CFA (color filter array),CFA过滤不同频段的光,因此,Sensor的输出的RAW数据信号包含了3个通道的信息。 CFA的排列方式一般有以下几种: 现在应用最广泛的是Bayer CFA。…

Sql Server中查询当天,最近三天,本周,本月,最近一个月,本季度的数据的sql语句...

--当天&#xff1a;select * from T_news where datediff(day,addtime,getdate())0--最近三天&#xff1a;select * from T_news where datediff(day,addtime,getdate())< 2 and datediff(day,addtime,getdate())> 0--本周&#xff1a;select * from T_news WHERE (DATEP…

linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】

本文转载自&#xff1a;http://blog.chinaunix.net/uid-25014876-id-83299.html linux设备驱动归纳总结&#xff08;五&#xff09;&#xff1a;3.操作硬件——IO静态映射 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 有时候会觉…

UML中关联,聚合,组合的区别及C++实现

类间关系 在类图中&#xff0c;除了需要描述单独的类的名称、属性和操作外&#xff0c;我们还需要描述类之间的联系&#xff0c;因为没有类是单独存在的&#xff0c;它们通常需要和别的类协作&#xff0c;创造比单独工作更大的语义。在UML类图中&#xff0c;关系用类框之间的连…

sql server management studio 快速折叠object explorer中的instance

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/6e20fa7a-c0a9-496b-89b2-19c6bd996ffc/how-to-collapse-object-explorer-tree-in-management-studio?forumsqltools home键&#xff0c;回到top level。 然后F5刷新&#xff0c;就会自动折叠了转载于:https://www.…

自动白平衡算法学习

一、概述 1、颜色恒常性 首先,从色彩学的角度,自然界中的任一种颜色都可以用红、绿、蓝三种颜色混合而成,因此这三种颜色被做为最常用的三原色,即RGB 三原色。 其次,眼睛对于色彩的察觉是由于光照射在物体之上,物体会吸收一部分波长的光,而其被物体反射的那部分波长的光…

自动曝光算法学习

一、概述 在一个完整的成像系统中,所得图像的亮度由四个方面因素所决定:环境光照强度、相机的光圈大小、曝光时间、信号增益。从这四个因素可以看出,首先环境光照强度是由外界环境光照所决定的,达不到人为任意控制;因此想要调整图像亮度至合适的程度,需要考虑对光圈大小、…

cocos2d-x 帧动画

ani cc.Animation:create(); ...... local animate cc.Animate:create(ani); s:runAction(animate); 发现一个问题&#xff0c;s如果是Node实例话就报错了&#xff0c;s必须是Sprite实例。转载于:https://www.cnblogs.com/qianwang/p/6249720.html

编写一个简单的spring MVC程序

一、下载和安装spring框架 进入http://repo.springsource.org/libs-release-local/org/springframework/spring/4.2.0.RELEASE/下载一个spring框架&#xff0c;然后打开lib目录里的jar文件拷贝到项目的WEB-INF/lib目录下。 二、配置web.xml文件 ?1234567891011121314151617181…

DM368 Uboot

这三个参数均有UBOOT直接传递给内核&#xff0c;所以要想知道他们具体的作用&#xff0c;需要根系内核模块的结构。 dm365_imp.oper_mode 是指在内核模块中内存空间采用连续、或者不连续模式。 davinci_capture.device_type 是你的捕获设备的…

7. B+树

一、B树是应文件系统所需而产生的一种B树的变形树 1. 定义&#xff08;使用阶数m来定义&#xff09; 除了根结点外&#xff0c;其他非终端结点最多有m个关键字&#xff0c;最少有⌈m/2⌉个关键字结点中的每个关键字对应一个子树所有的非终端结点可以看成是索引部分&#xff0c;…

Retinex理论及算法学习

为了能够获取最大的信息量,达到更好的图像增强效果。了解人类视觉系统的特性和图像的属性是准确地选择图像增强方法的必备知识。 一、人眼视觉系统 1、人眼成像 人的眼睛是一个非常复杂的器官。一般来说它就是一个球体,平均直径约为20mm,内壁是一层视网膜(retina),前部…

js或css文件后面的参数是什么意思?

经常看到不少导航网站测样式或js文件后面加了一些参数&#xff0c;主要是一你为一些并不经常更新的页面重新加载新修改的文件。 经常遇到页面里加载的js与css文件带有参数&#xff0c;比如&#xff1a; <script type"text/javascript" src"jb51.js?version1…

TCP/IP协议与UDP协议的区别

首先咱们弄清楚&#xff0c;TCP协议和UCP协议与TCP/IP协议的联系&#xff0c;很多人犯糊涂了&#xff0c;一直都是说TCP/IP协议与UDP协议的区别&#xff0c;我觉得这是没有从本质上弄清楚网络通信&#xff01;TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。…

C++类静态成员与类静态成员函数

当将类的某个数据成员声明为static时&#xff0c;该静态数据成员只能被定义一次&#xff0c;而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本&#xff0c;但静态数据成员只有一个实例存在&#xff0c;与定义了多少类对象无关。静态方法就是与该类相关…

HDR 成像技术学习(一)

在描述一个场景的时候,动态范围(Dynamic Range)指的是其最亮部与最暗部的亮度比值。高动态范围的场景(High Dynamic Range Scene)指的是场景里同时存在非常明亮和非常暗淡的部分。 图像传感器所能捕捉的动态范围是有限的,它受到两个因素的限制,一个是满阱容量(Full Wel…

Linux编程 3 (初识bash shell与man查看手册)

一.初识bash shell 1.1 启动 shell GNU bash shell 能提供对Linux系统的交互式访问。通常是在用户登录终端时启动&#xff0c;登录时系统启动shell依赖于用户账户的配置。etc/passwd文件包含了所有系统用户列表以及每个用户的基本配置信息。      如上图:最后一个字段&…

HDFS概述(5)————HDFS HA

HA With QJM 目标 本指南概述了HDFS高可用性&#xff08;HA&#xff09;功能以及如何使用Quorum Journal Manager&#xff08;QJM&#xff09;功能配置和管理HA HDFS集群。 本文档假设读者对HDFS集群中的一般组件和节点类型有一般的了解。有关详细信息&#xff0c;请参阅HDFS架…