268. Missing Number
Description
Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3] return 2.
Note: Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
Solution
- 题意即在一个n大小的数组中(包含0-n中n个数),找到那个缺少的数字。
- 由于题目要求线性时间以及不能用额外的空间,于是我们利用位运算巧妙解决。
- 注意到按位异或运算,倘若两个相同的数字按位异或那么得到0,倘若0和某个数按位异或那么还是该数。
- 利用两个性质,我们可以将下标和数组的数字都异或一遍,那么最终成对的都会变成0(利用结合律和交换律思考),最终剩下的那个就是缺少的。代码如下
int missingNumber(int* nums, int numsSize) {
int rnt = numsSize;
for (int i = 0;i < numsSize;i++) {
rnt ^= i;
rnt ^= nums[i];
}
return rnt;
}