題目說明
給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
解題思路一
主要看一下題目的要求,線性複雜度,不適用額外的空間。
- 這裏可以巧妙的使用異或運算符的特性,
相同值的異或爲0;所有的值,異或0都是本身。
數組的所有項向異或之後的結果就是隻出現一次的值 - 我使用了reduce的數組方法,事實上可能也新開闢了空間,我們完全按照題意的話,可以直接使用數組第1項進行代替。
代碼實現一
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
return nums.reduce((sum, item, key, arr) => {
return (sum ^= item)
}, 0)
};