首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用位运算如何找到数组中只出现一次的数?

使用位运算如何找到数组中只出现一次的数?

作者头像
Yuzuriha
发布2026-01-14 19:05:39
发布2026-01-14 19:05:39
670
举报
文章被收录于专栏:Linux网络Linux网络

题目链接:137. 只出现一次的数字 II - 力扣(LeetCode)

算法解析

位运算是用于二进制的运算符号。而对于多次出现的数字,其二进制都是一模一样的,这里是3次重复的出现是数字。由此我们可以想到,如果我们由低到高去计算为一个bit位上的和,对和取余3。如果为0则代表这个bit位上都是重复出现的数字。如果位1则代表出现的我们要找的数字。我们将这个bit的结果记录,再去计算和判断下一个bit位

代码实现

代码语言:javascript
复制
//计算每一个bit位的和
class Solution {
public:
    int singleNumber(vector<int>& nums)
    {
        int ret = 0;//ret负责记录每一个bit位的变化情况

        for (int i = 0; i < 32; i++)//一个整型一共有32个bit位
        {
            int sum = 0;
            for (auto& e : nums)
            {

                if (((e >> i) & 1) == 1)//从低到高计算每个元素在同一个bit位上的和
                    sum++;
            }

            sum %= 3;
            if (sum == 1)//当取余结果为1时,说明出现了我们要找的数字,我们将其记录
                ret |= (sum << i);
        }
        return ret;
    }
};

拓展

其实对于这种题:一个元素只出现一次,其余元素出现n次。方法是一样的,只需要将取余3改为取余n即可

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法解析
  • 代码实现
  • 拓展
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档