利用位或异(’^’)
位或异的效果为,以2,5,7为例
如果第一位输入为5,第二位为7,则有
5:101
7:111
位或非即若两数相同得到0,不相同为1
end:010与二进制的2相同,但不代表已输入2,所以不可以提前输出
再输入2可以得到000,同理如果之后输入2,5得到的就是111,即7;2,7得到的为101,即5;5,7得到的为010,即2,与题目要求相同,可以作为解题方法
代码执行
int singleNumber(vector<int>& nums) {
int size = nums.size();
int sum = 0;
for(int r = 0;r < size;++r){
sum = nums[r] ^ sum;
}
return sum;
}
重整排序,检测
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(int r = 0;r + 1 < nums.size();++r){
if(nums[r] == nums[r + 1]) ++r;
else return nums[r];
}
return nums[nums.size() - 1];
}