剑指 Offer 56 - II. 数组中数字出现的次数 II

剑指 Offer 56 - II. 数组中数字出现的次数 II

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

 

示例 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

 

解析:

将nums中的每个数字的二进制按位相加

之后遍历一遍每一位都%3

剩下的就是结果数字的二进制了

再转换为10进制即可

class Solution {
public:
    int one[32];
    void split(int x)
    {
        int idx = 0;
        while(x)
        {
            one[idx++] += x & 1;
            x >>= 1;
        }
    }


    int singleNumber(vector<int>& nums) {
        memset(one, 0, sizeof(one));
        for(int i = 0; i < nums.size(); i++)
        {
            split(nums[i]);
        }
        int ret = 0;
        long long t = 1;
        for(int i = 0; i < 32; i++)
        {
            one[i] %= 3;
            ret += (int)((long long)one[i] * t);
            t *= 2;

        }

        return ret;


    }
};

 

posted @ 2022-07-24 18:54  WTSRUVF  阅读(14)  评论(0编辑  收藏  举报