配列numsに1回だけ表示される番号を除いて、他のすべての番号は3回表示されます。一度だけ現れる番号を見つけてください。
例1:
入力:nums = [3,4,3,3]
出力:4
例2:
入力:nums = [9,1,7,9,7,9,7]
出力:1
制限:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
カイジは本当に自動化する方法を知らないので、私はほんの少しのゴミしか使うことができません。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ma[32];
memset(ma,0,sizeof(ma));
for(int i=0;i<nums.size();i++)
{
int j=0;
while(nums[i])
{
if(nums[i]&1)
{
ma[j]++;
}
j++;
nums[i]>>=1;
}
}
long ans=0;
long cnt=1;
for(int i=0;i<32;i++)
{
if(ma[i]%3==1)
{
ans+=cnt;
}
cnt<<=1;
}
return ans;
}
};