5.4 位运算专题:LeetCode 137. 只出现一次的数字 II

news2025/4/21 15:39:40
1. 题目链接

LeetCode 137. 只出现一次的数字 II


2. 题目描述

给定一个整数数组 nums,其中每个元素均出现 三次,除了一个元素只出现 一次。请找出这个只出现一次的元素。
要求

  • 时间复杂度为 O(n),空间复杂度为 O(1)。

示例

  • 输入:nums = [2,2,3,2] → 输出:3
  • 输入:nums = [0,1,0,1,0,1,99] → 输出:99

3. 示例分析
  1. 常规测试
    • nums = [3,3,3,5] → 输出 5
  2. 负数测试
    • nums = [-1,-1,-1,-2] → 输出 -2
  3. 大数测试
    • nums = [10000,10000,10000,1] → 输出 1

4. 算法思路

核心思想逐位统计 + 模 3 运算

  1. 逐位统计
    • 整数为 32 位,对每一位 i(0 ≤ i < 32),统计所有数字在该位上为 1 的总次数。
  2. 模 3 运算
    • 若某一位的总次数 sum % 3 == 1,说明只出现一次的数在该位上为 1,否则为 0
  3. 构造结果
    • 将所有满足 sum % 3 == 1 的位设置为 1,得到最终结果。

数学原理

  • 出现三次的数的每个二进制位之和必为 3 的倍数,模 3 后为 0。
  • 只出现一次的数在每个二进制位上的值决定了该位模 3 的结果。

5. 边界条件与注意事项
  1. 负数处理
    • 使用算术右移(保留符号位),确保负数二进制位的正确统计。
  2. 整数溢出
    • 输入数组中的数可能在 INT_MININT_MAX 之间,但算法本身不涉及运算溢出。
  3. 全零情况
    • 若所有位统计均为 0,结果为 0(题目保证存在唯一解,无需额外处理)。

6. 代码实现
class Solution 
{
public:
    int singleNumber(vector<int>& nums) 
    {
        int ret = 0;
        // // 逐个处理 ret 的每一个比特位(共32位)
        for (int i = 0; i < 32; i++) 
        {
            int sum = 0;
            // 统计第i位为1的总次数
            for (int x : nums) 
				if (((x >> i) & 1) == 1) sum++;
            sum %= 3;
            // 若模3余1,设置该位为1
            if (sum == 1) ret |= (1 << i);

        }
        return ret;
    }
};

在这里插入图片描述


与其他方法的对比

方法时间复杂度空间复杂度核心思想
位运算法O(32n) → O(n)O(1)逐位统计,模3运算
哈希表法O(n)O(n)统计频率,遍历查找
排序遍历法O(n log n)O(1)排序后检查每三个连续元素
有限状态机O(n)O(1)位运算模拟三进制状态转移

位运算法的优势
  1. 无额外空间:仅需常数空间,适合内存敏感场景。
  2. 兼容性:正确处理负数和大数,无需类型转换。
  3. 确定性:严格线性时间复杂度,不受数据分布影响。

分步解析

  1. 初始化结果变量

    int ret = 0;
    
    • ret 初始为 0,所有二进制位均为 0
  2. 逐位统计与构造结果

    • 外层循环:遍历 32 位中的每一位。
      for (int i = 0; i < 32; i++)
      
    • 内层循环:统计当前位 i 的总出现次数。
      for (int x : nums) {
          if (((x >> i) & 1) == 1) sum++;
      }
      
    • 模 3 运算
      sum %= 3;
      
    • 设置结果位
      if (sum == 1) ret |= (1 << i);
      

总结

位运算法通过逐位统计和模 3 运算,以 O(n) 时间复杂度和 O(1) 空间复杂度高效解决了“只出现一次的数字 II”问题。其核心思想是将问题分解到每个二进制位上,利用数学性质过滤重复元素。相较于哈希表法和排序法,位运算法在空间和效率上表现更优,尤其适合处理大规模数据或内存受限的场景。

扩展思考

  • 通用性:若问题改为“其他元素出现 k 次”,可将模 3 改为模 k。
  • 有限状态机:通过位运算模拟三进制状态转移,可进一步优化常数时间。

关键点

  • 理解二进制位的独立性及模运算的过滤作用。
  • 处理负数时算术右移的特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 轴指令(omron 机器自动化控制器)——>MC_SetPosition

机器自动化控制器——第三章 轴指令 11 MC_SetPosition变量▶输入变量▶输出变量▶输入输出变量 功能说明▶时序图▶重启动运动指令▶多重启运动指令▶异常 MC_SetPosition 将轴的指令当前位置和反馈当前位置变更为任意值。 指令名称FB/FUN图形表现ST表现MC_SetPosition当前位…

Python+Requests+Pytest+YAML+Allure接口自动化框架

GitHub源码地址&#xff08;详细注释&#xff09;&#xff1a;源码 调试项目python自主搭建&#xff1a;附项目源码 一、项目介绍 本项目是基于 PythonRequestsPytestYAMLAllure 搭建的 接口自动化测试框架&#xff0c;用于对 REST API 进行测试。 框架的主要特点包括&#…

用 Python 也能做微服务?

一、Python 和微服务&#xff0c;是敌是友&#xff1f; Python 因其极强的开发效率与生态&#xff0c;一直是数据处理、AI、Web 开发的主力选手。但在“微服务”这个领域&#xff0c;它一直处于边缘地带&#xff1a; 服务注册 / 发现&#xff1f;&#x1f937;‍♂️ 没有统一…

Maya基本操作

基本操作 按住ALT键&#xff0c;左键旋转视角&#xff0c;中键平移视角&#xff0c;右键放大缩小视角。 按空格键切换4格视图。 导入FBX格式文件后&#xff0c;无贴图显示。 按6键开启。着色纹理显示 坐标轴相关 修改菜单-左键最上面的虚线。固定修改选项窗口。 选中物体…

SQL Server Management Studio(SSMS)安装教程

目录 一、SSMS的下载 二、SSMS 的安装 三、连接服务器 四、卸载 SSMS 一、SSMS的下载 1.进入 SQL Server Management Studio 官方下载页面&#xff1a;SQL Server Management Studio点击进入下载页面 2.点击链接开始下载&#xff0c;浏览器右上角会显示下载进度&#xff1b;…

若依前端框架增删改查

1.下拉列表根据数据库加载 这个是用来查询框 绑定了 change 事件来处理站点选择变化后的查询逻辑。 <el-form-item label"站点选择" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…

LiteratureReading:[2023] GPT-4: Technical Report

文章目录 一、文献简明&#xff08;zero&#xff09;二、快速预览&#xff08;first&#xff09;1、标题分析2、作者介绍3、引用数4、摘要分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;分析 5、总结分析&#xff08;1&#xff09;翻译&#xff08;2&#xff09;…

Walrus 经济模型 101

本文作者&#xff1a;Steve_4P&#xff0c;文章仅代表作者观点。 要点总结 2025 年 3 月 20 日&#xff0c;Walrus 基金会宣布成功融资 约 1.4 亿美元&#xff0c;投资方包括 Standard Crypto、a16z 等机构。Walrus 当前估值约 20 亿美元&#xff0c;其中 7% 代币供应量分配给…

SpringCould微服务架构之Docker(1)

项目中微服务比较多的时候&#xff0c;一个一个手动的部署太麻烦了&#xff0c;所以就需要用到Docker。 项目部署中的问题&#xff1a; Docker是一种快速交付应用、运行应用的技术。

mac丝滑安装Windows操作系统【丝滑简单免费】

mac丝滑安装Windows操作系统【丝滑&简单&免费】 记录mac丝滑安装windows系统1、安装免费版 VMware fusion 132、安装Windows镜像文件3、跳过联网安装&#xff08;完成1后将2拖入1 点点点 即可来到3的环节&#xff09;4、 安装vmware 工具【非常重要&#xff0c;涉及联网…

系统与网络安全------网络应用基础(2)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 交换机 认识交换机 交换机&#xff0c;Switch 用户将多台计算机/交换机连接在一起&#xff0c;组建网络 交换机负责为其中任意两台计算机提供独享线路进行通信 非网管型交换机 即插即用交换机 即插即用&…

eclipse [jvm memory monitor] SHOW_MEMORY_MONITOR=true

eclipse虚拟机内存监控设置SHOW_MEMORY_MONITORtrue D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings org.eclipse.ui.prefs (文件比较多&#xff0c;别找错了&#xff09; SHOW_MEMORY_MONITORtrue 重启 -xms 1024…

【论文笔记】生成对抗网络 GAN

GAN 2014 年&#xff0c;Ian Goodfellow 等人提出生成对抗网络&#xff08;Generative Adversarial Networks&#xff09;&#xff0c;GAN 的出现是划时代的&#xff0c;虽然目前主流的图像/视频生成模型是扩散模型&#xff08;Diffusion Models&#xff09;的天下&#xff0c…

【Agent】Dify Docker 安装问题 INTERNAL SERVER ERROR

总结&#xff1a;建议大家选择稳定版本的分支&#xff0c;直接拉取 master 分支&#xff0c;可能出现一下后面更新代码导致缺失一些环境内容。 启动报错 一直停留在 INSTALL 界面 我是通过 Docker 进行安装的&#xff0c;由于项目开发者不严谨导致&#xff0c;遇到一个奇怪的…

【Excel使用技巧】某列保留固定字段或内容

目录 ✅ 方法一&#xff1a;使用 Excel 公式提取 body 部分 &#x1f50d; 解释&#xff1a; ✅ 方法二&#xff1a;批量处理整列数据 &#x1f6a8; 注意事项 &#x1f6a8; 处理效果 我想保留Excel某一列的固定内容&#xff0c;比如原内容是&#xff1a; thread entry i…

vue3,element-plus 表格搜索过滤数据

1、表格数据 // 表格数据 import type { User } from "/interface"; const tableData ref<User[]>([]); 2、 表格搜索过滤数据 // 搜索内容 const search ref(""); // 表格过滤数据 const tableFilterData computed(() >tableData.value.fi…

vue中上传接口file表单提交二进制文件流

1.使用elementui上传组件 要做一个选择文件后&#xff0c;先不上传&#xff0c;等最后点击确定后&#xff0c;把file二进制流及附加参数一起提交上去。 首先使用elementui中的上传组件&#xff0c;设置auto-uploadfalse&#xff0c;也就是选择文件后不立刻上传。 <el-uplo…

【学习笔记】卷积网络简介及原理探析

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程&#xff0c;深度学习领域研究生必读教材),开始深度学习领域学习&#xff0c;深入全面的理解深度学习的理论知识。 之前的文章参考下面的链接&#xf…

element-plus中Cascader级联选择器组件的使用

目录 一.基本使用 二.进阶使用 1.如何获取最后一级选项的值&#xff1f; 2.如何让级联选择器的输入框只展示最后一级&#xff1f; 三.实战 1.场景描述 2.实现步骤 ①设计后端返回值Vo ②编写controller ③编写service ④编写mapper层 ⑤在前端&#xff0c;通过发送…

【华为Pura先锋盛典】华为Pura X“阔折叠”手机发布:首次全面搭载HarmonyOS 5

文章目录 前言一、阔感体验&#xff0c;大有不同二、鸿蒙AI&#xff0c;大有智慧三、便携出行&#xff0c;大有不同四、首款全面搭载 HarmonyOS 5 的手机五、卓越性能&#xff0c;可靠安心六、红枫影像&#xff0c;大放光彩预热&#xff1a;鸿蒙电脑HarmonyOS 5 升级计划小结 前…