# 136 Single Number
實際運用到 bitwise operators 的 ^,值得複習 !!
Given a non-empty array of integers,
every element appears twice except for one.
Find that single one.
Note:
Your algorithm should have a linear runtime complexity.
Could you implement it without using extra memory?
input: 一個雙倍出現的數字 + 單獨出現的數字組成陣列
output: 找出那個落單的
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
*/
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {}
怎麼解
第一想法就是先排序後再找旁邊的是不是跟你一樣,不一樣就是落單的數字了。但後來看這篇 發現用 bitwise operators 可以超快。應用到 ^ 的特性。這題說是兩兩數字出現所以很適合用
^ (XOR)
bit1 ^ bit2 : 當兩個位元一樣時回傳0,不一樣時回傳1。
9 (base 10) = 1001 (base 2)
14 (base 10) = 1110 (base 2)
--------------------------------
14 ^ 9 (base 10) = 0111 (base 2) = 7 (base 10)
交换律:a ^ b ^ c <=> a ^ c ^ b
任何数于0异或为任何数 0 ^ n => n
相同的数可以等於 0: n ^ n => 0
var singleNumber = function(nums) {
let result = nums[0];
for(let i= 1; i< nums.length; i++){
result = result ^ nums[i]
}
return result;
};
console.log(singleNumber([4,1,2,1,2,2]))
所以 [4,1,2,1,2]
4 ^ 1 ^ 2 ^ 1 ^ 2
== 1 ^ 1 ^ 2 ^ 2 ^ 4
== 0 ^ 0 ^ 4
== 4 // 答案
Last updated
Was this helpful?