只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例1:
输入:nums=[2,2,1]
输出:1
示例2:
输入:nums=[4,1,2,1,2]
输出:4
示例3:
输入:nums=[1]
输出:1
思路
考虑复杂度的情况下,可以用异或计算来进行解题
异或运算有以下三个性质:
- 任何数和0做异或运算,结果仍然等于原来的数,即 a^0 = a
- 任何数和自生做异或结果为0
- 异或运算满足交换律和结合律,即 a^b^a = a^a^b = 0^b = b
所以代码可以怎么写
golang
func singleNumber(nums []int) int {
res := 0
for _,v := range nums{
res ^= v
}
return res
}