牛客网: BM52
题目: 数组中仅2个数字出现1次,其余出现2次
思路: 出现2次的数字异或结果为0,另外两个不同的数字异或结果res不为0,异或结果的二进制位必与其中一个相同,求出二进制位为1的pos, 遍历数组,所有此位置为1的数与异或结果再异或结果tmp即为其中一个出现1次的数字,tmp与res再异或即可得出另一个出现1次的数字。
代码:
// gopackage main
// import "fmt"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型一维数组 * @return int整型一维数组
*/
func FindNumsAppearOnce( nums []int ) []int {// write code hereres := nums[0]for i := 1; i < len(nums); i++ {res ^= nums[i]}pos := 0for res >> pos > 0 {if res >> pos & 1 == 1 {break} else {pos++}}tmp := resfor i := 0; i < len(nums); i++ {if nums[i] >> pos & 1 == 1 {tmp ^= nums[i]}}res = res ^ tmpif res > tmp {return []int{tmp, res}} else {return []int{res, tmp}}
}