// 解法一:
// 对于出现三次的数字,其每一位不管是0还是1都出现三次,求余3能整除
// 不能整除时,若为1,则一定是那个只出现一次的数字的那一位
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans=0;
for(int i=0;i<32;i++){
int cnt=0;
for(int n:nums){
if(n&(1<<i))
cnt++;
}
// 说明这个数在这一位是1
if(cnt%3==1)
ans^=(1<<i);
}
return ans;
}
};
// 解法二:使用哈希表记录次数
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int,int> mp;
for(int i=0;i<nums.size();i++){
mp[nums[i]]++;
}
for(auto& n:nums)
if(mp[n]==1)
return n;
return -1;
}
};