其他分享
首页 > 其他分享> > 剑指 Offer 56 - II. 数组中数字出现的次数 II

剑指 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

 

限制:

 

解析:

将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;


    }
};

 

标签:数字,nums,int,Offer,56,long,II,ret
来源: https://www.cnblogs.com/WTSRUVF/p/16515209.html