题解 | #数组中只出现一次的两个数字#

数组中只出现一次的两个数字

https://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8

package main


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型一维数组
 */
func FindNumsAppearOnce( nums []int ) []int {
    // write code here
  
  	//	a^a = 0  
    var res = make([]int, 2)
    tmp := 0
  	// 得到 a^b
    for _,  num := range nums {
        tmp ^= num
    }
	
  	// a^b 必有一位上是1, 找出最右边的1, 以此来将nums 分成两类
  	// 一类 &mask == 0 , 一类 &mask != 0 
    mask := 1
    for tmp & mask == 0 {
        mask <<= 1
    }
	
    a := 0 
    b := 0
	
    // 分成两类
    for _, num := range nums {
        if num&mask == 0 {
            a ^= num
        } else {
            b ^= num
        }
    }

    if a > b {
        res[0] = b
        res[1] = a
    } else {
        res[0] = a
        res[1] = b
    } 
    return res
}

全部评论

相关推荐

在做核酸的杰尼龟很想去广西嗦粉:bro这个简历看着不错啊,这都找不到吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务