LeetCode 268. Missing Number 题解(C++)
题目描述
- Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
举例
- Given nums = [0, 1, 3] return 2.
补充
- Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
思路
- 使用异或位运算完成。若两个数相同,则异或的结果为0。这里利用若某个位置在数组中没出现与该位置相等的元素,则整个数组异或完成后的结果即为该位置。这里先将nums的长度(也就是题目中的n)赋给bitXOR,之后开始对数组进行遍历,同时用bitXOR对当前数组的指针位置和该位置的值进行异或运算,得到的结果就是所求的值。
- 这里还可以把0到n加起来得到的值,减去数组所有元素的值得到结果。
代码
class Solution
{
public:
int missingNumber(vector<int>& nums)
{
int bitXOR = nums.size();
for (int i = 0; i < nums.size(); ++i)
{
bitXOR ^= i;
bitXOR ^= nums[i];
}
return bitXOR;
}
};