137. 只出现一次的数字 II
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
示例 1:
示例 2:
提示:
map:
func singleNumber(nums []int) int {
// map
m:=map[int]int{}
for _,v:=range nums {
m[v]++
}
for k,v := range m{
if v==1 {
return k
}
}
return 0
}
先排序再查找:
func singleNumber(nums []int) int {
// 先排序,在查找
sort.Ints(nums)
for i:=0;i<len(nums)-1;i=i+3{
if nums[i]!=nums[i+1]{
return nums[i]
}
}
return nums[len(nums)-1]
}
相似题:
位运算:高级用法
使用a保存出现了一次的数,使用b保存出现了两次的数,返回出现了一次的数a
相当于将出现三次的问题转换为出现两次的问题,先将已经出现过两次的数字保存下来,并做一次,当出现第三次的时候,与前两次异或
func singleNumber(nums []int) int {
// 位运算
a, b := 0, 0
for i := 0; i < len(nums); i++ {
a = (a ^ nums[i]) & (^b) // a:保留出现1次的数
b = (b ^ nums[i]) & (^a) // b:保留出现2次的数
}
return a // 最后返回只出现1次的数
}