268. 丢失的数字

122 阅读1分钟

题目:
给定一个包含 [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中是否存在。