ソードフィンガーオファー56-II。配列II内の数字の出現回数

配列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;
    }
};

おすすめ

転載: blog.csdn.net/qq_43624038/article/details/113780690