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

Leetcode 寻找重复数

在这里插入图片描述
可以使用 位运算 来解决这道题目。使用位运算的一个核心思想是基于数字的二进制表示,统计每一位上 1 的出现次数,并与期望的出现次数做比较。通过这种方法,可以推断出哪个数字重复。

class Solution {
public:int findDuplicate(vector<int>& nums) {int n = nums.size() - 1; //这里注意是nums.size()-1,因为size是n + 1,所以数字取值范围是 [1,n]int countNum = 0; int expectedNum = 0;int result = 0;//遍历32位,题目n<=10^5,所以最大数也足够用32位来表示了for(int bit = 0; bit < 32; ++bit) {//遍历每一位时,首先需要在循环初始将这两个计数器清零。或者在循环末尾处清零。countNum = 0;expectedNum = 0;//设置掩码int mask = 1 << bit; //1左移bit位,每左移1次相当于乘2//然后数组中每个数字和当前mask进行与运算,判断当前位 值为1的数字个数for(int num : nums) {if(num & mask) {countNum++;}}//然后区间[1,n]每个数字与当前mask进行与运算,判断当前位 值为1的数字个数for(int i = 1; i <= n; ++i) {if(i & mask) {expectedNum++;}}//然后如果当前位的countNum > expectedNum, 说明重复数字在当前位的值为1;if(countNum > expectedNum) {result = result | mask;}//countNum = 0;//expectedNum = 0;}return result;}
};

解释:

  1. 由于 nums 数组长度是 n + 1,所以它包含从 1 到 n 的数字,且有一个重复数字。
  2. 我们逐位检查每一个 bit(从 0 到 31),统计 nums 数组中哪些数字在该位上是 1,接着统计从 1 到 n 的数字在该位上是 1 的个数。
  3. 如果 nums 中在某个位上的 1 的个数多于从 1 到 n 的数字在该位上的 1 的个数,说明重复的数字在该位上是 1。
  4. 最终通过将这些结果合并(使用按位或运算),我们就能得到重复的数字。

优点:

  • 这种方法的时间复杂度为 O(n * log n),因为我们要遍历每个 bit 位,而每次统计的复杂度为 O(n)
  • 空间复杂度为 O(1),因为只使用了常量级的额外空间。

这是一个比较巧妙的位运算解法,适用于这类寻找重复数的场景。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue3: setup语法糖
  • B2C电商接口解决方案||搭建电商项目必备电商接口
  • Redis中的AOF重写过程及其实际应用
  • Linux echo,printf 命令
  • 工业一体机选型如何考虑硬件和软件兼容性
  • Spring Cloud全解析:熔断之Hystrix线程隔离导致的问题
  • web群集--nginx配置文件location匹配符的优先级顺序详解及验证
  • 防蓝光护眼灯有用吗?五款防蓝光效果好的护眼台灯推荐
  • 《JavaEE进阶》----11.<SpringIOCDI【Spring容器+IOC详解+DI介绍】>
  • ArcGIS Pro SDK (十三)地图创作 4 设备
  • 基于鸿蒙API10的RTSP播放器(八:音量和亮度调节功能的整合)
  • LeetCode --- 414周赛
  • 深入理解Linux中的多路复用技术:select、poll与epoll
  • 玄机靶场初体验
  • 目标检测-小目标检测方法
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 07.Android之多媒体问题
  • C++类中的特殊成员函数
  • CAP 一致性协议及应用解析
  • CSS实用技巧
  • js写一个简单的选项卡
  • leetcode386. Lexicographical Numbers
  • orm2 中文文档 3.1 模型属性
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vue ES6 Jade Scss Webpack Gulp
  • 不上全站https的网站你们就等着被恶心死吧
  • 解析带emoji和链接的聊天系统消息
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 通过几道题目学习二叉搜索树
  • 王永庆:技术创新改变教育未来
  • 网络应用优化——时延与带宽
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 最简单的无缝轮播
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​马来语翻译中文去哪比较好?
  • #Spring-boot高级
  • (1)(1.11) SiK Radio v2(一)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2)空速传感器
  • (52)只出现一次的数字III
  • (规划)24届春招和25届暑假实习路线准备规划
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)终结任务
  • (十八)三元表达式和列表解析
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (四)linux文件内容查看
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转载)深入super,看Python如何解决钻石继承难题
  • ./configure、make、make install 命令
  • .describe() python_Python-Win32com-Excel
  • .gitignore文件忽略的内容不生效问题解决
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net通过类组装数据转换为json并且传递给对方接口
  • .net通用权限框架B/S (三)--MODEL层(2)