题目地址:
https://leetcode.com/problems/missing-number/
给定一个长为 n n n的数组,其中数字都是 0 ∼ n 0\sim n 0∼n且两两不同,问那个没出现的数字是谁。
注意到32位整数与异或运算构成了一个阿贝尔群,每个元素的阶是 2 2 2,参考https://blog.csdn.net/qq_46105170/article/details/104082406,该群的单位元是 0 0 0,所以只需要将数组中所有的数异或一遍以后再与 1 , 2 , 3 , . . . , n 1,2,3,...,n 1,2,3,...,n异或一遍即可。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int x = nums.size();
for (int i = 0; i < nums.size(); i++) x ^= nums[i] ^ i;
return x;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。