该问题的输入是一个整数数组 nums,其中除了一个数字之外,其余数字都出现了两次。任务是找到那个只出现一次的数字,并将其返回。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int val = 0;
for(size_t i = 0;i<nums.size();i++)
val^= nums[i];
return val;
}
};
异或是位运算,计算1^2时,要将1和2转为二进制,即 0001 和 0010 ,按照“相同得0,不同得1” 的法则计算,结果为 0011 ,答案是 3 。
0与任何数字(包括0)异或结果为那个数字;
任何数字与自身异或结果为0;
并且异或满足交换率。
所以vector中所有出现两边的数字都被消除得0,0 与 0 异或得0,最后 0 与唯一的数字异或得到唯一的数字本身,那么就找到了只出现一次的数字。
如果重复的数字出现次数是奇数次,则此方法不可用
标签:数字,val,nums,int,解决方案,C++,异或,出现 From: https://www.cnblogs.com/zilin-wang/p/18347125