給定一個非空整數數組,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/single-number
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
var singleNumber = function(nums) {
// 方法一
var obj = {};
for (var i = 0; i < nums.length; i++) {
var item = nums[i];
if (!obj[item]) {
obj[item] = 1;
} else {
obj[item] += 1;
}
}
for (var k in obj) {
if (obj[k] == 1) {
return k
}
}
// 方法二 異或運算
let ans = 0;
for(const num of nums) {
ans ^= num;
}
return ans;
};
^= 異或運算
這個運算符主要是在位運算的時候使用,但是在普通的數也能使用,且有一個轉換過程,即將二進制的數轉換爲十進制
舉例
var a = 1 ^ 2;
//3
//1 -> 01
//2 -> 10
//1 ^ 2 -> 11 -> 3
var a = 3 ^ 2;
// 11 ^ 10 = 01 -> 1
同或運算
運算法則爲a同或b=ab+a‘b’(a'爲非a),即a和b相同爲真,不同爲假。