跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

位运算算法入门详解:常见位运算专题

位运算算法入门,涵盖判定字符唯一性、寻找丢失数字、两整数相加、查找单次出现数字及缺失两个数字等经典问题。通过哈希表、异或运算、位图思想及鸽巢原理等多种方法对比分析,提供时间复杂度 O(N) 至 O(1) 的解决方案,帮助读者掌握位运算核心技巧。

JavaCoder发布于 2026/3/22更新于 2026/6/228 浏览
位运算算法入门详解:常见位运算专题

判定字符是否唯一

题目描述

判断字符串中所有字符是否都是唯一的。

算法思路

解法一:哈希数组

从前往后扫描字符串,将扫描到的字符放入哈希表中。如果对应的值已存在则返回 false,否则标记为已访问。时间复杂度 O(N),空间复杂度 O(N)。

不需要真的创建哈希表,只需创建一个大小为 26 的哈希数组,遍历元素时对应位置 +1。

解法二:借助位图思想

单独一个 int 变量有 32 位。从 0 位到 25 位分别代表 a~z 26 个小写字母。只要前面出现过,对应比特位就是 1,否则为 0。大量运用查询某一个比特位是否为 1,以及将某一个比特位修改为 1。

文章配图

优化:鸽巢原理

因为这道题有 26 个英文字母,当字符串长度 len > 26,就一定有重复字符。所以可以先判断字符串长度是否大于 26。

代码实现

文章配图 文章配图


丢失的数字

题目描述

给定包含 n 个不同数字的数组,找出其中缺失的那个数字。

算法思路

解法一:哈希表

在 n+1 个数中找丢失的数,创建同等规模的哈希表,key 为 0 到 n。扫描一遍数组之后,返回 val=0 对应的 key。时间复杂度 O(N),空间复杂度 O(N)。

解法二:高斯/等差数列求和

利用公式计算总和,减去数组实际总和。时间复杂度 O(N),空间复杂度 O(1)。

文章配图

解法三:位运算(异或^运算)

将所有数(上下所有的数)全部异或在一起,相同的数会消去,最终结果就是缺失的数。时间复杂度 O(N),空间复杂度 O(1)。

文章配图

为了方便理解两步循环的异或操作,举例如下:假设第一个循环是 ret=1^2^3^5,第二个循环是 ret=ret^1^2^3^4^5,通过异或的消消乐原理,最终计算的就是 ret=1^1^2^2^3^3^4^5^5=4。

代码实现

文章配图 文章配图 文章配图


两整数之和

题目描述

不使用运算符 + 和 -,计算两个整数的和。

算法思路

使用位运算(异或无进位相加)。

  1. 异或 ^ 用于无进位相加。
  2. 按位与 & 找到需要进位的位置。
  3. 进位需要左移一位 <<1。
  4. 重复上述过程直到进位为 0。

对于上图,如果两个数的同一位置进行无进位相加,进位的结果只可能是 1 或者 0。蓝色的两行通过按位与&,可以得到红色的进位结果。

文章配图 文章配图 文章配图 文章配图 文章配图 文章配图

如果还是存在消去进位的情况,就要重复上面的操作,先分别算出 c^d 和 (c&d)<<1 的结果。继续 e^f,此时就没有消去进位的情况,得到的就是最终的结果。

我们只需要以 (a&b)<<1 != 0 作为循环判断条件,对每次得到的进位结果进行判断,直到进位等于 0,结束循环,最终的 a^b 即为最开始 a+b 的结果。

过程总结

文章配图

代码实现

文章配图 文章配图 文章配图


只出现一次的数字Ⅱ

题目描述

数组中除了一个元素只出现一次外,其余每个元素均出现三次。

算法思路

任意一个比特位,会出现如下四种情况:

  1. 三个 0
  2. 两个 0,一个 1
  3. 一个 0,两个 1
  4. 三个 1

对四个数的 32 位比特位的某一位之和出现的四种情况进行剖析,我们发现圈起来的数字前后一一对应。左边圈起来的数表示只出现一次的那一个比特位,这个比特位与四个比特位之和 %3 得到的结果相等。

因此,创建一个返回值 ret,把这四个数的每一个比特位加起来,再模 3,得到的结果放入 ret 对应的比特位上。如果模 3 的结果为 0,不用修改 ret 对应的比特位;如果模 3 的结果为 1,就把 ret 对应比特位修改为 1,直到修改完 ret 的 32 位比特位即可。

拓展:如果一个数组中,有一个数出现一次,其他相同的数出现 n 次,把模 3 修改成模 n,其他操作相同。

代码实现

文章配图 文章配图


消失的两个数字

题目描述

给定一个包含 0, 1, ..., n 中 n-2 个不同数字的数组,找出缺失的两个数字。

算法思路

这道题的算法原理是 268.丢失的数字 + 只出现一次的数字Ⅲ 的算法原理糅合。

解法:位运算

回忆丢失的数字中的算法原理,就是把 nums 中的数和 0 ~ N 这所有的数都糅合在一起,通过异或来找出丢失的数。

将所有的数异或在一起,定义一个变量 tmp 来接收。通过异或消消乐的特性,最终 tmp = a ^ b,就是缺失的那两个数异或的结果。

接下来,我们要把 a,b 分开。需要先找到 tmp 中,比特位为 1 的那一位。因为 a 和 b 一定是不同的两个数,a^b 的最终结果 tmp 绝对是不等于 0 的,所以在 tmp 的 32 位比特位上,肯定有二进制数为 1 的比特位,记录这个位置的下标为 x。

这个二进制数 1 的出现,是因为异或运算律:相同为 0,相异为 1。所以只要 tmp 中二进制位对应的二进制数为 1,a,b 对应的二进制位肯定是不同的。

那么,就可以根据 x 位的不同,对 a,b 划分成两个单独部分,对每个部分中的所有数进行异或。

思考链路

文章配图

总结

文章配图

代码实现

文章配图 文章配图


相关题目推荐

191. 位 1 的个数 338. 比特位计数 461. 汉明距离 136.只出现一次的数字 260.只出现一次的数字III

目录

  1. 判定字符是否唯一
  2. 题目描述
  3. 算法思路
  4. 解法一:哈希数组
  5. 解法二:借助位图思想
  6. 优化:鸽巢原理
  7. 代码实现
  8. 丢失的数字
  9. 题目描述
  10. 算法思路
  11. 解法一:哈希表
  12. 解法二:高斯/等差数列求和
  13. 解法三:位运算(异或^运算)
  14. 代码实现
  15. 两整数之和
  16. 题目描述
  17. 算法思路
  18. 过程总结
  19. 代码实现
  20. 只出现一次的数字Ⅱ
  21. 题目描述
  22. 算法思路
  23. 代码实现
  24. 消失的两个数字
  25. 题目描述
  26. 算法思路
  27. 解法:位运算
  28. 思考链路
  29. 总结
  30. 代码实现
  31. 相关题目推荐
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • PX4 无人机结合 MID360 与 FAST-LIO 实现室内定位及定点
  • 通义万相 2.1 图生视频技术测评与部署指南
  • 利用 AI 快速生成《无尽冬日》游戏自动化脚本
  • Python 使用 openpyxl 和 pandas 处理 Excel 详解
  • 链表基础概念及常用算法题解析
  • 国内环境下 Git 极速安装与镜像加速配置指南
  • 自动驾驶激光雷达运动畸变与鬼影处理及核心实现
  • OpenClaw Nginx 反向代理部署及 disconnected (1008) 问题解决
  • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
  • LLaMA 系列模型演进:从 Llama-1 到 Llama-3 的技术发展与对比
  • Stable Diffusion 原理解析与本地部署实战
  • 算法专题:快慢双指针判断快乐数
  • Layui 框架下 Unity WebGL 切换 Tab 黑屏问题的修复方案
  • 深度学习模型优化策略与实战调参
  • 基于 cpolar 内网穿透远程部署 Open-Lovable 网页克隆工具
  • DeepSeek R1 本地化部署与 Web 端访问及知识库搭建指南
  • 前端状态管理方案对比与选型指南
  • 人工智能生成物(AIGC)独创性判断标准——以文生图模式为例
  • Python 常见数据结构详解
  • 前端视角的 API 设计最佳实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online