找出数组中两个只出现一次的数字
问题描述:一个数组中除了两个数字之外,其余数字均出现了两次(或偶数次)。请写出程序查找出这两个只出现一次的数字,要求时间复杂度为O(n),空间复杂度为O(1)
func findTwoNum() {
//数组只有两个数没有重复
arr := [10] int{1, 2, 3, 4, 8, 6, 4, 3, 2, 1}
re := 0
//所有数抑或运算
for _, v := range arr{
re ^= v
}
//查找抑或结果二进制从右往左第一个非0位置index
index := firstOneIndex(re)
num1 := 0
num2 := 0
for _,v2 := range arr{
//数组成员index位是1的抑或=num1,非1的抑或num2。 num1 和num2则是要找的元素,因为其他成员重复抑或为0
if(checkNum(v2, index)){
//index位是1
num1 ^= v2
} else {
num2 ^= v2
}
}
fmt.Println("num1=",num1,"num2=",num2)
}
func firstOneIndex(re int) int{
index := 0
for re > 0 {
if(re&1 == 1){
break
}
index ++
re = re>>1
}
return index
}
func checkNum(num int, index int) bool {
if((num >> index) & 1 == 1){
return true
}
return false
}

浙公网安备 33010602011771号