面試題——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.pswp.cn/news/253619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253619.shtml
英文地址,請注明出處:http://en.pswp.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架…