我觉得我是一个傻子。因为题目限制了用线性复杂度且不扩展内存,一开始我想的是用nums[nums[i]]的正负号标记nums[i]出现的次数,后来发现给出的原序列没有说本来就是正整数。然后想了很久都没想出来。其实这个题的关键在于只有一个数是不重复的,已知A XOR A=0,A XOR B XOR A=B,只要把所有数连续异或就好了。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int num = 0;
for (int i = 0; i < n; ++i)
num ^= a[i];
return num;
}
};