当前位置: 首页 > news >正文

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

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

 算法解析

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

 代码实现

//计算每一个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即可

相关文章:

  • docker笔记
  • QEMU源码全解析 —— 块设备虚拟化(3)
  • 如何在需求分析阶段考虑未来扩展性
  • c++介绍函数指针 十
  • 面试高频#LeetCode#Hot100-字母异位词分组
  • Generative Image Dynamics(动态图像生成)
  • uni-app学习笔记——自定义模板
  • 基于 GEE 的城市热岛效应分析——可视化地表温度 LST 与归一化植被指数 NDVI 的关联
  • <03.13>八股文补充知识
  • 24个希腊字母
  • Unity中WolrdSpace下的UI展示在上层
  • AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤
  • JAVA面试_进阶部分_dubbo负载均衡策略
  • uniapp APP使用web-view内嵌 h5 解决打包发版浏览器有缓存需要清除的问题
  • IO多路复用——epoll(20250307)
  • 关于Linux contOS 7 的防火墙
  • 蓝桥杯 之 回溯之充分剪枝
  • 深度学习优化算法全面解析:从理论到实践
  • PyTorch vs NumPy:核心区别与选择指南
  • wow-rag:task2-正式上路搞定模型
  • 网站打不开 清理缓存后可以打开/安徽seo报价
  • 旧网站如何优化/南京最大网站建设公司
  • 天津网站推广公司哪家好/网络推广渠道公司
  • 在线视频直播网站建设/广州:推动优化防控措施落地
  • 用dw做网站的菜单栏/优化模型有哪些
  • dede网站名称不能中文/长沙市seo百度关键词