如何在 JavaScript 陣列中找到只出現奇數次的整數?


給定一個整數陣列,已知所有元素都出現偶數次,只有一個元素出現奇數次。我們的任務是在單次迭代中找到該元素。

這是一個示例陣列:

[1, 4, 3, 4, 2, 3, 2, 7, 8, 8, 9, 7, 9]

在嘗試解決這個問題之前,我們需要了解一點關於按位異或 (^) 運算子的知識。

異或運算子如果兩個運算元互補則返回 TRUE,如果兩個運算元相同則返回 FALSE。

異或 (^) 運算子的真值表:

0 ^ 0 → 0
0 ^ 1 → 1
1 ^ 0 → 1
1 ^ 1 → 0

如果仔細觀察這種行為,我們會注意到,當對完全相同的值使用異或運算子時(例如,12^12),它總是返回 FALSE 或 0,換句話說,它可以用來否定出現偶數次的數值。而這正是我們想要的。

因此,在下面的程式碼中編寫相同的內容:

示例

const sampleArray = [1, 4, 3, 4, 2, 3, 2, 7, 8, 8, 9, 7, 9];
console.log(sampleArray.reduce((a, b) => a ^ b));

它迭代每個元素,並不斷否定出現偶數次的元素,最終返回只出現奇數次的元素。

輸出

控制檯輸出將是:

1

更新於:2020年8月18日

125 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告