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

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

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}
}

全部评论

相关推荐

点赞 评论 收藏
分享
04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务