問題描述
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
示例
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
複製程式碼
答案
本次題目可以採用異或(^)來解決。
異或的規則:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
複製程式碼
總結
- 任何數異或0等於該數本身
- 兩個相同的數異或等於0
- 通過二進位制進行位數相加
程式碼如下:
func singleNumber(_ nums: [Int]) -> Int {
var singleNum = 0
for num in nums {
singleNum = singleNum ^ num
}
return singleNum
}
複製程式碼
nums = [2,3,4,3,2]
的執行結果如下:
第一次迴圈:
0 ^ 2 = 2
二進位制:0 + 10 = 10
第二次迴圈:
2 ^ 3 = 1
二進位制:10 + 11 = 1
第三次迴圈:
1 ^ 4 = 5
二進位制:1 + 100 = 101
第四次迴圈:
5 ^ 3 = 6
二進位制:101 + 11 = 110
第五次迴圈:
6 ^ 2 = 4
二進位制:110 + 10 = 100
複製程式碼
結語
語言是招式,演算法是內功。希望我們勤練內功,早日成就自己的江湖!