原题
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1]
输出: 2
示例 2:
输入: [9,6,4,2,3,5,7,0,1]
输出: 8
思路
本体的思路同「leetcode」136.只出现一次的数字基本类似,在一个0~n的连续数组中,缺少一位。我们在原有数组的基础上,填充一份等长的数组,然后依次对数组中的每一个成员使用异或操作符,步骤拆解如下:
- nums = [a, b, d] a~d的连续数组中,缺少c
- nums = [a, b, d, a, b, c, d] 在原有数组中填充一份0~n连续完整的数组
- 使用异或^, 处理数组中每一个数字 a ^ b ^ d ^ a ^ b ^ c ^ d
- a ^ b ^ d ^ a ^ b ^ c ^ d 等价于 (a ^ a) ^ (b ^ b) ^ (d ^ d) ^ c 等价于 0 ^ 0 ^ 0 ^ c => c
- 得到缺少的数字c
代码
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function(nums) {
let len = nums.length + 1
let result = 0
for (let i = 0; i < len; i++) {
nums.push(i)
}
for (let i = 0; i < nums.length; i++) {
result = nums[i] ^ result
}
return result
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。