日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异

發布時間:2025/3/19 javascript 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LeetCode今天面臨的挑戰是在數組中查找所有消失的數字。

蠻力

我們的輸入包括一個缺少數字的實際數組。我們想將該數組與相同長度的數組進行比較,其中沒有遺漏的數字。所以如果給定的話[4,3,2,7,8,2,3,1],我們想比較一下[1,2,3,4,5,6,7,8].

進行比較的一種方法是生成不丟失數字的數組。我們可以使用Array.keys(此處為MDN文檔)來實現。

運作方式如下:

請注意,您可以使用.slice(index)返回以您作為參數傳入的索引開頭的所有元素。

在我們的代碼中,我們可以像這樣使用這些概念:

現在,我們可以使用JavaScript的.filter()來比較兩者:

在第3行中,我們要求僅返回allNums中不包含在nums中的那些數字的返回值。

這種方法有效,但是它是非常慢。

將.indexOf()換成include并沒有多大區別:

我們需要一種新方法!

在LeetCode上有一百萬種解決方案—我一直在尋找一種對于像我這樣的Noob而言高效且易于理解的解決方案。我通過LeetCode的Ashotovich1990找到了一個很棒的人。

首先最容易解釋這個概念。然后,我們繼續構建代碼。這是他解決問題的方法:

Setup

設置一個正確長度的比較數組,其中所有值均為false。如果輸入是[1,2,2],則比較數組將為[false, false, false]。

第一循環

循環遍歷輸入數組,像這樣修改比較數組(稍后在下面解釋)

input array: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ ?1 ?, ? 2 ? , ? 2 ? ]comparison array before loop: ? ? ? ? ? ? ?[false, false , false ]comparison array after loop: ? ? ? ? ? ? ? [ true , true , false ]

第二循環

循環瀏覽修改后的比較數組。找到時false,抓住它的索引并加1來確定缺失數字的值。

comparison array after loop: ? ? ? ? ? ? ? [ true , true , false ]indices => ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0 ? , ? 1 ?, ? 2missing number = index of false + 1 ? ? ? ? ? ? ? ? ? ? ? ? ? 3

最后,將每個缺失的數字推入響應數組并返回響應。

建立我們的解決方案

首先,讓我們建立一個名為的空數組missing。我們將使用它來收集丟失的數字。(Noobs:您經常會看到這個名為的數組res,它是。的縮寫response。我更喜歡使用更多的語義名稱)。

步驟1,設置比較數組

讓我們使用JavaScript的.fill()設置比較數組。這是建立新陣列的方式。(您也可以使用它來覆蓋現有數組的值。請參見MDN文檔)。

在下面的代碼中,我們將比較數組另存為seen。我們首先將所有值設置為false,以表明我們尚未從輸入數組中“看到”任何數字。

步驟2,我們的第一個循環。將“看到”中的適當值更改為true。

let nums = [1,2,2] //seen = [false, false, false] for (let i = 0; i < nums.length; i++) { ? ? ? ?seen[nums[i]-1] = true; ? ?};

讓我們打開包裝。我們遍歷輸入數組,nums.我們檢查每個數組的值nums[i],減去一個,然后將相同索引處的值更改seen為equaltrue.

如果這使您感到困惑,那么您并不孤單。使用以上輸入,以下是seen每個循環后的演變:

let nums = [1,2,2]seen = [false, false, false]seen[nums[i]-1] = true;loop 1, i = 0: ? ? ?seen[nums[0] - 1] ?=> ?nums[0] = 1 ?=> ?seen[1 - 1] ?=> ?seen[0] = true seen => [true, false, false]loop 2, i = 1: ? ? ?seen[nums[1] - 1] ?=> ?nums[1] = 2 ?=> ?seen[2 - 1] ?=> ?seen[1] = trueseen => [true, true, false]loop 3, i = 3: ? ? ?seen[nums[3] - 1] ?=> ?nums[2] = 2 ?=> ?seen[2 - 1] ?=> ?seen[1] = trueseen => [true, true, false]

到目前為止,我們的代碼:

步驟3.我們的第二個循環。

這是我們遍歷的地方seen,尋找的值false。

1. ?for (let i = 0; i < seen.length; i++) { 2. ? ? ? ? if (!seen[i]){ 3. ? ? ? ? ? missing.push(i+1); 4. ? };

在第2行上,seen [i]是我們正在循環的當前項目。當我們寫時if(!seen[i]),我們說的是,如果當前項的計算結果為false(繼續第3行)。

在第3行,我們在索引號上加1以獲取缺失號的值,然后將該數字推入缺失數組中。

這是最終代碼。

它對內存不是很好,但是對速度卻很好!

您可以在PythonTutor.com上看到代碼實時執行,也可以在repl.it上運行它:

https://repl.it/@Joan_IndianaInd/missing-numbers-in-array

版權所有?Joan Indiana Lyness 2019

如果您錯過了它:算法101:JavaScript中的旋轉數組—三種解決方案

總結

以上是生活随笔為你收集整理的如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。