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

[优选算法专题五.位运算——NO.35~36 只出现一次的数字 II、消失的两个数字]

题目链接:

137. 只出现一次的数字 II

题目描述:

题目解析:

功能总结

该代码用于解决「数组中除一个数字只出现一次外,其余数字都出现三次」的问题,核心思路是利用二进制位运算

  1. 原理:对于二进制的每一位,统计所有数字在该位上出现的总次数。由于除目标数字外的其他数字均出现 3 次,它们在该位的贡献总和一定是 3 的倍数(对 3 取余为 0)。因此,总次数对 3 取余的结果,就是目标数字在该位的值(0 或 1)。

  2. 步骤

    • 遍历 32 位整数的每一个二进制位;
    • 统计每个位上 1 的总出现次数;
    • 对次数取 3 的余数,确定目标数字在该位的值;
    • 拼接所有位的值,得到最终结果。
  3. 时间复杂度:O (32×n) = O (n),其中 n 为数组长度,32 是固定常数。

  4. 空间复杂度:O (1),仅使用常数额外空间。


题目链接:

面试题 17.19. 消失的两个数字

题目描述:

功能总结

该代码用于解决「在包含 1~n+2 的数字中,缺失了两个数字,找出这两个缺失数字」的问题,核心思路是利用异或运算的性质

  1. 原理

    • 异或运算具有 x^x=0x^0=xa^b^b=a 的性质;
    • 若将数组中所有元素与 1~n+2 的所有数字异或,最终结果为两个缺失数字的异或(a^b);
    • 找到 a^b 中第一个为 1 的二进制位(diff),该位说明 a 和 b 在该位上的值不同(一个为 0,一个为 1);
    • 根据 diff 位将所有数字分为两组,每组内异或后即可分别得到 a 和 b
  2. 步骤

    • 计算数组元素与 1~n+2 的异或总和,得到 a^b
    • 确定 a 和 b 的二进制差异位 diff
    • 按 diff 位分组异或,分别得到两个缺失数字。
  3. 时间复杂度:O (n),其中 n 为数组长度,需遍历数组和 1~n+2 的数字。

  4. 空间复杂度:O (1),仅使用常数额外空间。

http://www.dtcms.com/a/535705.html

相关文章:

  • 晶台光耦KL101X:光伏发电系统的安全卫士与效率引擎
  • 普诚PT5139深度解析:功能特性、应用场景与技术优势
  • MCoT在医疗AI工程化编程的实践手册(下)
  • Qwen系列模型:WAN介绍
  • HarmonyOS大型项目架构与模块化开发指南
  • 怎呀做网站网站超级外链
  • 做游戏模型参考的网站保定网站建设制作开发平台
  • 【IoTDB】时序数据库选型迷茫?Apache IoTDB 为何成工业场景优选?
  • Linux系统编程—线程概念与控制
  • (122页PPT)华为初级项目管理培训(附下载方式)
  • GPT-OSS-20B昇腾NPU实战:从模型转换到42.85 tokens/s性能突破
  • 大模型请求/响应参数完全拆解:每个字段都是什么意思?
  • WIFI|硬件 Vanchip射频芯片 VC5776-11设计应用6
  • Java字符串深度解析:从内存模型到常用方法全掌握
  • 1688货源网官方网站专用车网站建设多少钱
  • 网站运营的目的及意义wordpress 颜色选择器
  • 【高阶数据结构】哈希表
  • 【Qt开发】容器类控件(二)-> QTabWidget
  • 模板进阶:从非类型参数到分离编译,吃透 C++ 泛型编程的核心逻辑
  • Springboot 局域网部署https解除安全警告
  • 封装map和set(红黑树作为底层结构如何实现map和set插入遍历)
  • 如何保证RabbitMQ不出现消息丢失?
  • 购物网站建设 属于信息系统管理与设计么?一个网站的制作特点
  • 如何快速进行时间序列模型复现(以LSTM进行股票预测为例)
  • Git 远程操作:克隆、推送、拉取与冲突解决
  • Telegram 被封是什么原因?如何解决?(附 @letstgbot 搜索引擎重连技巧)
  • uniapp(1)
  • 河北建站公司优化大师的功能有哪些
  • 电力电网安全实训难题多?VR安全教育软件给出新方案
  • [MySQL]表——聚合函数