算法:只出现一次的数字II

题目

链接:leetcode链接


思路分析

这道题目其实是一个观察题,比较考察观察能力。

数组中只有一个元素只出现一次,其他的元素都出现三次

我们假设有n个元素出现三次

那么所有的元素的第i位的和加起来只有下面的四种情况

3n * 0 + 0

3n * 0 + 1

3n * 1 + 0

3n * 1 + 1

我们将其%3 会发现

结果与仅出现一次的元素在该位上的数字一样。

3n * 0 + 0 %3 = 0

3n * 0 + 1 %3 = 1

3n * 1 + 0 %3 = 0

3n * 1 + 1 %3 = 1

所以,我们的思路就出来了

我们只需要去获取这个只出现一次的元素在每一个bit位上的数字即可。

代码

C++ 复制代码
int singleNumber(vector<int>& nums) {
        int n = nums.size();
        int ans = 0;

        for(int i = 0;i < 32;++i)
        {
            int bit = 0;
            for(auto& e:nums)
            {
                bit += ((e >> i) & 1);
                bit %= 3;
            }

            if(bit == 1)
            {
                ans |= (1 << i);
            }
        }

        return ans;
    }
相关推荐
jaysee-sjc4 分钟前
【项目二】用GUI编程实现石头迷阵游戏
java·开发语言·算法·游戏
元亓亓亓8 分钟前
LeetCode热题100--169. 多数元素--简单
算法·leetcode·职场和发展
闲人不梦卿15 分钟前
算法的特性
算法
Z9fish16 分钟前
sse哈工大C语言编程练习22
c语言·开发语言·算法
j4455661118 分钟前
C++中的备忘录模式
开发语言·c++·算法
m0_6038887119 分钟前
POP Prefill-Only Pruning for Efficient Large Model Inference
算法·机器学习·ai·剪枝·论文速览
近津薪荼21 分钟前
dfs专题——二叉树的深搜3(二叉树剪枝)
c++·学习·算法·深度优先
拼好饭和她皆失21 分钟前
数学知识:约数的详细解析
算法·数论
伯明翰java21 分钟前
排序算法(1)
算法·排序算法
啊阿狸不会拉杆24 分钟前
《机器学习导论》第 2 章-监督学习
数据结构·人工智能·python·学习·算法·机器学习·监督学习