题目描述:求数组中只出现一次的数字
import Foundation
class For40Solution {
func appearOnce(_ nums: [Int]) -> Int {
var n = nums[0]
for i in 1..<nums.count {
n ^= nums[i]
}
return n
}
}
算法思想:这是假设数组中只出现一次的数字只有一个,那就直接异或,最后的这个数就是结果。
如果只出现一次的数字有两个呢?那就先异或,得出两个数的异或结果,然后从低位向高位找第一个为1的位。然后根据这一位为1和0把数组分成两组,然后两组数分别异或,就得出最后的结果了。因为异或,不同才为1。所以找不为1的那位,也就证明两个数在那一位肯定不同,所以能把两个数分到不同的数组。
github地址:https://github.com/cubegao/LeetCode