136. 只出现一次的数字详解以及Golang实现
题目如下:

思路:
- 用map记次数
- 用异或(^)来实现消除重复出现的数字
运行效果:

Code:
思路1:
func singleNumber(nums []int) int {
count := make(map[int]int, len(nums))
for i := 0; i < len(nums); i++ {
count[nums[i]]++
}
for i, v := range count {
if v == 1 {
return i
}
}
return 0
}
思路2:
func singleNumber(nums []int) int {
single := 0
for _, num := range nums {
single ^= num
}
return single
}
思路1这里就不多赘述,相信有点基础就可以看懂。
这里详解一下思路2.

如图,结果应该输出5。
关于异或(^)

白话:先转二进制,同位上的数字相同则为0,否之则为1,上图也就是思路2的核心说在,通过异或相同为0这一特性消除重复出现的数字。
过程:
1 =》 0001 signle=signle^1 == 0^1 => 0001 =>1
5 =》 0101 signle=signle^5 == 1^5 => 0100 =>4
1 =》 0001 signle=signle^1 == 4^1 => 0101 =>5
最后返回5


本文系作者 @孤独常伴 原创发布在 L0ne1y。未经许可,禁止转载。