当前位置: 首页 > 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),因为只使用了常量级的额外空间。

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

http://www.lryc.cn/news/436790.html

相关文章:

  • 大一新生以此篇开启你的算法之路
  • 【AI大模型】ChatGPT模型原理介绍(上)
  • 基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模
  • C++竞赛初阶L1-15-第六单元-多维数组(34~35课)557: T456507 图像旋转
  • 无线领夹麦克风哪个牌子好?西圣、罗德、猛犸领夹麦克风深度评测
  • React Native 0.76,New Architecture 将成为默认模式,全新的 RN 来了
  • Java并发:互斥锁,读写锁,Condition,StampedLock
  • 客户端负载均衡Ribbon实例
  • MySQL数据库负载均衡
  • 达梦CASE_SENSITIVE参数解析
  • 酒店智能轻触开关工作原理
  • web基础之RCE
  • c语言--水仙花数,求Sn的前五项和
  • SpringBoot教程(二十八) | SpringBoot集成Elasticsearch(Java High Level Rest Client方式)
  • 【Vue3】常用的响应式数据类型
  • 搭建本地DVWA靶场教程 及 靶场使用示例
  • 60. n 个骰子的点数【难】
  • 高性能编程:无锁队列
  • word标题排序编号错误
  • 力扣---80. 删除有序数组中的重复项 II
  • 一篇文章,讲清SQL的 joins 语法
  • 设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)
  • 文生视频算法
  • LoRA: Low-Rank Adaptation Abstract
  • 正点原子阿尔法ARM开发板-IMX6ULL(二)——介绍情况以及汇编
  • Unreal Engine——AI生成高精度的虚拟人物和环境(虚拟世界构建、电影场景生成)(一)
  • Emlog程序屏蔽用户IP拉黑名单插件
  • 发送成绩的app或小程序推荐
  • 51单片机-AT24C02(IIC总线介绍及其时序编写步骤)-第一节(下一节实战)
  • <<编码>> 第 11 章 逻辑门电路--或非门, 与非门, 缓冲器 示例电路