原题地址:点我传送
题目要求无额外空间和线性时间,所以另外拿数组记录是不可行的,想到异或操作有以下特性:
1. 0^N=0
2. N^N=0;
3. N1^N2^N3=N3^N1^N2(结合性)
因此只需要逐个异或最后留下来的必是只出现过一次的数字。
C++:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=0;
for(int i=0;i < nums.size();i++)
{
ans^=nums[i];
}
return ans;
}
};
Java:
public class Solution {
public int singleNumber(int[] nums) {
int ans=0;
for(int x:nums)
{
ans^=x;
}
return ans;
}
}