思路:利用二进制的异或关系。相同的两个数字异或为0,不同的数字异或会得到1.那么将数组中的所有数都进行异或。相当于乘法中的移项一样,可以将两个相同的数进行异或为0,这样两两相同的数就会被消去,最后只剩下单个的那个数和0进行异或,即可得到单个的那个数。
注意:异或关系式将每个数转为二进制,然后对应的位置上进行异或。一个数与0进行异或,这个数保持不变。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=0;
for(auto num:nums) ans^=num;
return ans;
}
};