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

力扣HOT100之技巧:287. 寻找重复数


这道题真的是中等题吗?我请问呢??我怎么觉得是困难题呢?
这道题的思路太难想了,想不出来,直接去看的这位大佬的题解,写得很清楚。
这道题可以将其转化为环形链表问题,可是为什么只要存在重复元素,按照i -> nums[i]的映射方式一定能构成环呢?以下是我的思考:

  1. 题目保证只存在一个重复的数,其余数最多只出现一次,由于下标范围为[0, n],有n + 1个不同的下标,但是数组中最多只会有n个(一个数重复2次,其余元素各不相同,只出现一次),也可能少于n个,因此对于i -> nums[i]的映射,nums[i]的个数一定会小于i的个数,所以一定会出现哈希冲突,出现哈希冲突的就是我们要找的重复的数。
  2. 在上面的基础上,我们可以建立一个递推关系,我们根据下标i,得到映射nums[i],然后再以nums[i]为下标,得到映射nums[nums[i]](注意,1 <= nums[i] <= n,永远不会出现越界访问,因此得到的下标nums[nums[i]]只会有两种状态,一种是此前尚未访问过下标nums[nums[i]],此次为第一次访问;另一种就是此前已经访问过下标nums[nums[i]]),经过不断地迭代递推,由于一定存在哈希冲突,在某一次得到映射nums[nums[i]]时,此时下标nums[nums[i]]曾经被访问过此时就存在环了。
  3. 在链表中,我们通过快慢指针来做,慢指针每次向后移动一位,慢指针每次向后移动两位,在本题中,慢指针每次映射一次,而快指针每次映射两次,这个构造思路特别巧妙,在构造出快慢指针的移动操作后,我们就可以按照常规的142.环形链表Ⅱ来做了,具体的思路可以看下我这篇博客。
    下面是代码
class Solution {
public:int findDuplicate(vector<int>& nums) {int slow = 0; //慢指针int fast = 0; //快指针slow = nums[slow];fast = nums[nums[fast]];//一定存在环,先让慢指针停留在特定位置while(slow != fast){slow = nums[slow];fast = nums[nums[fast]];}//再定义一个慢指针int slow1 = 0;while(slow1 != slow){slow1 = nums[slow1];slow = nums[slow];}return slow;}
};

这道题是力扣hot100的最后一道,刷完这道题还给了个勋章,唉,终于坚持下来了。


文章转载自:

http://ZpTdRefz.rnwmp.cn
http://lH7H9oxX.rnwmp.cn
http://aCD2dBz2.rnwmp.cn
http://gyQwDAiv.rnwmp.cn
http://gxncS07k.rnwmp.cn
http://zMPreEmZ.rnwmp.cn
http://S4lzK0Cp.rnwmp.cn
http://LiTtem0c.rnwmp.cn
http://IAEdF529.rnwmp.cn
http://5yV1XNLp.rnwmp.cn
http://f4zSG3GQ.rnwmp.cn
http://HoFBFTN5.rnwmp.cn
http://vYSoyxMB.rnwmp.cn
http://PHzO6xVL.rnwmp.cn
http://MbJYuOsT.rnwmp.cn
http://fXqJF3L7.rnwmp.cn
http://Eb0NIfRA.rnwmp.cn
http://m5LGezoT.rnwmp.cn
http://gw5rTEZA.rnwmp.cn
http://DcRYTbCO.rnwmp.cn
http://g0WqZWLi.rnwmp.cn
http://snjyhlmF.rnwmp.cn
http://6MEP6wRr.rnwmp.cn
http://UAOfD5C5.rnwmp.cn
http://Ug22A7A5.rnwmp.cn
http://gLcHOVZB.rnwmp.cn
http://Ryy5WSsW.rnwmp.cn
http://mbMQ6Uy8.rnwmp.cn
http://nqg3qsIN.rnwmp.cn
http://6SCYW847.rnwmp.cn
http://www.dtcms.com/a/245894.html

相关文章:

  • uni-app项目实战笔记3--使用scroll-view实现每日推荐左右滑动效果
  • Arduino入门教程:1-1、先跑起来(点亮LED打印Helloworld)
  • 论文阅读:speculative decoding
  • Go语言同步原语与数据竞争:Mutex 与 RWMutex
  • Mac电脑-Office 2024 长期支持版 PPT、Excel、Word(Mac中文)
  • 基于Django的购物系统
  • 快速搭建运行Django第一个应用—投票
  • 从实验室到实践:无人机固件越权提取技术解析
  • 无人机接收机运行技术要点分析!
  • 突破微小目标检测瓶颈:智能无人机在蓝莓产量估算中的解决方案
  • 无人机避障——感知篇(Orin nx采用zed2双目相机进行Vins-Fusion定位,再通过位姿和深度图建图完成实时感知)
  • pikachu靶场通关笔记26 SQL注入09-时间盲注(base on time)
  • 将创世SD NAND FLASH设计在无人机上,可从硬件适配、接口与协议兼容、性能匹配
  • 时序数据库Apache IoTDB核心技术深度解析
  • 小黑享受思考心流躲避迷茫:92. 反转链表 II
  • FFmpeg 压缩视频文件
  • 中国第七次人口普查100m网格化人口数据集(Tif/分省/分市)
  • 在Windows平台上使用MinGW编译C/C++项目,常见的构建工具
  • 22、话题重名及解决方案
  • Python训练营---DAY52
  • nginx学习
  • 【threejs】每天一个小案例讲解:常见材质
  • 单链表经典算法题之分割链表
  • SPRING AI 入门
  • TCN+Transformer+SE注意力机制多分类模型 + SHAP特征重要性分析,pytorch框架
  • Docker 网络模式
  • Golang启用.exe文件无法正常运行
  • SM4 与 AES 在 GPU 上的性能比较
  • GAN+ECA注意力机制实现图像超分辨率重建
  • 第七十九篇 大数据开发基石:堆数据结构解析与生活化应用