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

LeetCode 137「Single Number II」详解:位计数 + 模3运算 + 状态机

给定题目是 LeetCode 137「Single Number II」:在一个整数数组中,除了一个元素只出现一次以外,其余每个元素都恰好出现三次,要求在 O(n) 时间、O(1) 额外空间内找出这个只出现一次的元素。cnblogs+1​

题意与难点

题目核心约束:

  • 所有「杂音」元素都出现 3 次。
  • 只有目标元素出现 1 次。
  • 不能用哈希表计数(不满足常数空间),也不能排序(不满足线性时间)。leetcode+1​

难点在于:如何利用「出现三次」这个信息,把所有重复元素的贡献抵消掉,只保留那个只出现一次的数的 位信息。cnblogs​

基础思路:按位计数 + mod 3

可以把每个数当成 32 位二进制整数,从「每一位」的角度来看问题。dbwu+1​

对于第 i 位(0 ≤ i < 32):

  • 统计数组里有多少个数在这一位是 1,记为 count[i]。
  • 所有出现 3 次的数,如果这一位是 1,就为这一位贡献 3 的倍数个 1。
  • 只有那个出现 1 次的数,如果这一位是 1,会多贡献一个 1,使总数变成 3k+1。dbwu+1​

因此:

  • 对每一位的计数做 count[i] % 3,结果只可能是 0 或 1。
  • 结果为 1 的位,说明这一位属于只出现一次的那个数;结果为 0 的位,说明这一位全被「3 次」的元素抵消干净了。linkedin+1​

最终,把所有 count[i] % 3 == 1 的位组合起来,就构成答案的二进制表示,从而恢复出这个唯一元素。linkedin+1​

这个思路的逻辑完全正确:时间复杂度是 O(32×n) 也就是 O(n),空间只需要 32 个计数器(常数级),符合题目要求。algo+1​

进一步优化:有限状态机(ones / twos)

在按位计数的基础上,可以继续压缩空间,把「每一位出现次数 mod 3」压缩成一个小型有限状态机,用两个整数的比特来并行维护所有位的状态,即常见的 ones / twos 写法。liadbiz.github+1​

对于某一位来说,出现次数 mod 3 的状态只有三种:0 次、1 次、2 次。

用两位二进制来编码这三种状态,例如:

  • 00:出现 0 次。
  • 01:出现 1 次。
  • 10:出现 2 次。
  • 出现第 3 次时状态回到 00,相当于做了一次模 3 运算。liadbiz.github+1​

ones 和 twos 两个整数的每一位就分别代表该位计数的低位和高位,整套逻辑就是在所有位上并行进行一个「模 3 加法器」。csdn+1​

最终,出现次数为 1 的那个数的各个位,会停留在状态 01,也就是保存在 ones 里,所以 ones 就是最后答案。csdn+1​

这个有限状态机写法本质上是对「按位计数 + mod 3」的进一步压缩与抽象,但核心思想完全一样:利用模 3,把所有出现三次的数字抹掉,只留下出现一次的那个数的位模式。cnblogs+1​

负数处理要点

由于题目允许负数,通常使用 32 位有符号整数:

  • 在按位计数的方案中,只要一视同仁地处理 32 位(包含最高的符号位),最终重建出来的二进制如果最高位是 1,就对应一个负数,这样也能正确还原结果。vultr+1​
  • 有些讲解会特别说明第 31 位(符号位)需要单独按补码规则处理,但只要语言本身用补码表示,按位统计 + 重建即可自然兼容。algo+1​

小结

  • 思想起点:从「数」切换到「位」,对于每一位统计 1 的出现次数。
  • 关键观察:出现 3 次的数在每一位上的贡献必然是 3 的倍数,只有目标数让某些位变成 3k+1。
  • 实现路径
    • 入门版:32 个计数器 + 双层循环 + mod 3 重构答案。
    • 进阶版:用 ones / twos 状态机把每一位的计数 mod 3 压缩到两个整型中。

整道题本质就是一题典型的「按位计数 + 模运算 + 位运算有限状态机」练习,非常适合作为位运算思维的入门模板。dbwu+1​

http://www.jsqmd.com/news/204741/

相关文章:

  • QCon主题分享征集:吸引一线工程师参与实践
  • 2026上海雅思培训机构哪家好?真实口碑机构推荐 - 品牌排行榜
  • 大模型开发平台:高校大模型教学与开发一体化平台
  • 2026年靠谱的柚木定制柜,柚木柜体,缅甸柚木柜厂家采购优选指南 - 品牌鉴赏师
  • 新定义(24年台州一中自主招生第25题)
  • 报表自动化进阶:Java精确操控Excel打印页边距的实战方法
  • GitLab CI共享Runner配置:开源项目自动测试VibeThinker
  • 2026上海雅思培训机构测评:师资与口碑综合分析 - 品牌排行榜
  • 百度世界大会合作伙伴招募:联合发布行业解决方案
  • 管理信息系统在线作业如何告别纸上谈兵?
  • 2026上海托福培训机构推荐:口碑机构实力盘点 - 品牌排行榜
  • 义乌汽车租赁公司亲测调研报告 - 呼呼拉呼
  • PowerShell脚本自动化:定时执行VibeThinker批处理任务
  • C语言fscanf读取文件时,文件指针怎么移动的?
  • 协同共赢 数智冷链如何构建餐饮连锁高质量发展新生态 - 博客万
  • 2026年市面上靠谱的磁力泵公司电话,防腐离心泵/耐酸离心泵/耐腐蚀氟塑料泵/不锈钢磁力泵,磁力泵生产厂家电话 - 品牌推荐师
  • 2025-2031年全球与中国高低温试验箱市场竞争格局及重点企业竞争力深度分析 - 品牌推荐大师1
  • 2025高定服装加盟优选,助力创业者抢占市场!,高定服装加盟采购色麦新中式市场认可度高 - 品牌推荐师
  • 2025年阁楼货架品牌盘点:口碑与品质的双重保障,模具仓库货架厂家批发/重型仓库货架生产厂商/仓储货架安装厂家阁楼货架厂商哪个好 - 品牌推荐师
  • 上海全屋定制哪家更专业?2026年5强品牌权威测评与最终推荐! - 品牌推荐
  • 用户行为分析看板:了解VibeThinker实际使用模式
  • FP16量化尝试:进一步压缩VibeThinker模型体积的可能性
  • 2026年广州全屋定制品牌推荐:聚焦顶奢楼盘项目的5家服务商实力盘点。 - 品牌推荐
  • Streamlit整合案例:构建交互式数学问题求解演示系统
  • 因式分解的应用 (20年湛江一中自主招生)
  • 【收藏必学】LangGraph实战:从零构建AI工作流,大模型应用开发入门指南
  • AI智能配机:个性化电脑配置推荐平台——从需求到方案的精准匹配
  • eBPF在Docker中启用后性能下降30%?真相曝光,附压测数据与调优方案
  • Prompt工程最佳实践:最大化发挥VibeThinker推理潜能
  • 基于Django短视频推荐系统设计与搭建-(源码+LW+可部署)