javascript
如何快速找出找出两个数组中的_找出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中两个数组之间的差异的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 引入antd组件样式_如何使用 dumi
- 下一篇: gradle idea java ssm