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

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

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

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @return int整型一维数组
*/
func FindNumsAppearOnce( array []int ) []int {
    // write code here
	// 先将全部数进行异或运算,得出最终结果
    num := array
	tmp := 0
	for _, val := range num {
		tmp ^= val
	}
	// 找到那个可以充当分组去进行与运算的数
	// 从最低位开始找起
	mask := 1
	for (tmp & mask) == 0 {
		mask = mask << 1
	}
	// 进行分组,分成两组,转换为两组 求出现一次的数字 去求
	a, b := 0, 0
	for _, val := range num {
		if val&mask == 0 {
			a ^= val
		} else {
			b ^= val
		}
	}
	if a > b {
		return []int{b, a}
	}
	return []int{a, b}
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务