如何在 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
廣告