第一次出现的数字

第一次出现的数字 | 笔记整理!

只出现一次的数字 |

异或的性质 | 参考百度

异或的性质

1
2
3
4
5
6
7
func singleNumber(nums []int) int {
ans:=0
for _,v := range nums{
ans^=v
}
return ans
}

只出现一次的数字 ||

进行映射即可 | 处理一下溢出问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func singleNumber(nums []int) int {
ans ,k:= 0,3
for i := 0; i < 32; i++ {
cnt:= 0
mask:=1<<i
for _,v :=range nums{
if v&mask>0{
cnt++
}
}
if cnt%k>0{
ans|=mask
}
}
return int(int32(ans))
}

只出现一次的数字 III

还是利用异或

  1. 将所有数据异或一次 结果得到ans=a^b 其中ab是我们需要求解的数据

  2. 显然ans是不能等于1的,我们可以对于ans区别划分 因为ab至少有一位是不一样的,所以我们可以随便取一位不一样的 进行将所有数据区分.然后重新异或该位为10的数据 得到ab中的其中一个

  3. 然后异或一下ans便可以得到最终答案!

  4. 求取不一样某位不一样的1我们可以使用补码原理,快速处理直接找到最低位的1即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func singleNumber(nums []int) []int {
ans:=0
for _,v:=range nums{
ans^=v
}
pre:=ans&(-ans)
tmp:=0
for _,v:=range nums{
if v&pre>0{
tmp^=v
}
}
return []int{tmp,ans^tmp}
}