题目:
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
解法:
方法一:数列求和公式
func missingNumber(nums []int) int {
length := len(nums)
total := length * (length - 1) / 2
sum := 0
for i := 0; i < len(nums); i ++ {
sum = sum + nums[i]
}
return total - sum
}
方法二:
位运算,构造nums使得丢失的数字只出现一次,其他数字出现两次。
将nums进行异或运算,最后得到的数字就是丢失的数字;
异或的特性:
1、x ^ x = 0 (用了这个特性,并且^符合交换律和结合律)
2、x ^ 0 = x
func missingNumber(nums []int) int {
ans := 0
length := len(nums)
for i := 0; i < length; i ++ {
ans = ans ^ nums[i]
}
for i := 0; i <= length; i ++ {
ans = ans ^ i
}
return ans
}
方法三: 将所有数字存放在map里,遍历数字n,然后查找map中是否存在。