0
点赞
收藏
分享

微信扫一扫

137. 只出现一次的数字 II、Leetcode的Go实现

鱼板番茄 2022-03-13 阅读 31

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次的数
}

 

举报

相关推荐

0 条评论