目录
相信大家都会找简单的“单身狗”,那么三个人一起的话要怎么找单身狗呢 ?
解题思路
我们非从二进制的位去进行分析,对于非单身狗的数,某个二进制为1的话,这个1一定是成三倍出现的,那么某个二进制位的个数膜三余一的话就代表着这个1为单身狗所拥有,我们只需要进行重现记录1的个数然后重现即可
解题方法一
我们先对每一个数的二进制1记录在数组digit中,然后在进行重现
class Solution {
public:
int singleNumber(vector<int>& nums)
{
vector<int>digit(32); //记录位
for (auto e : nums)
{
while (e)
{
int num = e & -e; //找到num中最低位的1
int i = log(num) / log(2); //取对数确定位置
digit[i]++;
e &= e - 1; //消去这个1
}
}
int ans = 0;
for (int i = 0; i < 32; i++)
{
if (digit[i] % 3)
{
ans ^= 1 << i; //数据重现
}
}
return ans;
}
};