Leetcode 137.只出现一次的数字 II【二进制位处理】

文章目录

  • 问题描述
  • 解题报告
  • 实现代码
  • 参考资料

问题描述

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

解题报告

参考 【每日算法Day 72】谷歌面试题:又双叒叕是位运算,最详细的自动机推导过程。解释非常清楚。

实现代码

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ans = 0,counter=0;
        for (int i = 0; i < 32; ++i) {
            counter = 0;
            for (auto x : nums) {
                counter += (x>>i)&1;
            }
            ans |= (counter%3)<<i;
        }
        return ans;
    }
};

参考资料

[1] Leetcode 137.只出现一次的数字 II
[2] 【每日算法Day 72】谷歌面试题:又双叒叕是位运算,最详细的自动机推导过程

你可能感兴趣的:(leetcode,二进制,位运算)