美文网首页位运算
【剑指 offer】数组中唯一只出现一次的数字

【剑指 offer】数组中唯一只出现一次的数字

作者: 邓泽军_3679 | 来源:发表于2019-05-08 17:06 被阅读0次

1、题目描述

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

请找出那个只出现一次的数字。

你可以假设满足条件的数字一定存在。

思考题:
  • 如果要求只使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?

样例
输入:[1,1,1,2,2,2,3,4,4,4]
输出:3

2、问题描述:

3、问题关键:

  • 可以通过位运算的方式,用二进制的方式表示,将每一位相加求和再对3取模,就可以得到结果。

4、C++代码:

class Solution {
public:
    int findNumberAppearingOnce(vector<int>& nums) {
        int n = nums.size();
        int bit[32] = {0};
        for (int i = 0; i < 32; i ++)
            for (int j = 0; j < n; j ++) 
                bit[i] += (nums[j] >> i) & 0x01;
        int res = 0;
        for (int i = 0; i < 32; i ++) 
            res += (bit[i] % 3) << i;
        return res;
    }
};

相关文章

网友评论

    本文标题:【剑指 offer】数组中唯一只出现一次的数字

    本文链接:https://www.haomeiwen.com/subject/nrrvoqtx.html