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

问题

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

示例

输入: nums = [3,4,3,3]
输出: 4

解答1:哈希表

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        unordered_map<int, int> ump;
        for (int num : nums)
            ump[num]++;
        for (auto [k, v] : ump) 
            if (v == 1) return k;
        return 0;
    }
};

解答2:位运算

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int count[32] = {0}; // 存储每位出现的次数
        for (int num : nums) {
            for (int i = 0; i < 32; i++) {
                count[i] += num & 1;
                num >>= 1;
            }
        }
        int res = 0;
        for (int i = 31; i >=0; i--) { // 每位%3后,剩下的为单独的数的二进制表示
            res <<= 1;
            res |= count[i] % 3;
        }
        return res;
    }
};
posted @ 2021-03-09 20:02  tmpUser  阅读(44)  评论(0编辑  收藏  举报