1.给你一个整数数组 nums ,除某个元素仅出现一次外,其余每个元素都恰好出现偶数次。请你找出并返回那个只出现了一次的元素。
func singleNumber(nums []int) int {
xor := 0
for k := range nums {
xor ^= nums[k]
}
return xor
}
2.给你一个整数数组 nums ,除某两个元素仅出现一次外,其余每个元素都恰好出现偶数次。请你找出并返回那两个只出现了一次的元素
func DoubleNumber(nums []int) []int {
xor := 0
for k := range nums {
xor ^= nums[k]
}
onlyOne := 0
rightOne := xor & (-xor)
for k := range nums {
if (nums[k] & rightOne) != 0 { // (nums[k] & rightOne) == 0 | (nums[k] & rightOne) == rightOne
onlyOne ^= nums[k]
}
}
return []int{onlyOne, xor ^ onlyOne }
}
3.给你一个整数数组 nums ,除某个元素仅出现一次外,其余每个元素都恰好出现三次。请你找出并返回那个只出现了一次的元素。
func singleNumber(nums []int) int {
ans := int32(0)
for i := 0; i < 32; i++ {
total := int32(0)
for k := range nums {
total += (int32(nums[k]) >> i) & 1
}
if total%3 > 0 {
ans |= 1 << i
}
}
return int(ans)
}
该题需要强调int32类型,否则处理异号数值时容易出现问题