题解 | #数组中只出现一次的两个数字#
数组中只出现一次的两个数字
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
}

