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

寻找重复数 - LeetCode 热题 100

大家好!我是曾续缘😝

今天是《LeetCode 热题 100》系列

发车第 100 天

技巧第 5 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

寻找重复数

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数

你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

示例 1:

输入:nums = [1,3,4,2,2]
输出:2

示例 2:

输入:nums = [3,1,3,4,2]
输出:3

示例 3 :

输入:nums = [3,3,3,3,3]
输出:3

提示:

  • 1 <= n <= 105
  • nums.length == n + 1
  • 1 <= nums[i] <= n
  • nums只有一个整数 出现 两次或多次 ,其余整数均只出现 一次

进阶:

  • 如何证明 nums 中至少存在一个重复的数字?
  • 你可以设计一个线性级时间复杂度 O(n) 的解决方案吗?
难度:💖💖

解题方法

我们可以利用快慢指针的思想来解决这个问题。我们将数组看作一个链表,数组中的元素值对应着链表中的下一个节点的索引。因为数组中存在重复的数字,所以链表一定存在环,我们要找到环的入口即为重复的数字。

  1. 初始化两个指针 slow 和 fast,初始都指向数组的第一个元素。
  2. slow 指针每次移动一个位置,fast 指针每次移动两个位置,直到它们相遇在环内的某个位置。
  3. 一旦两个指针相遇,将其中一个指针重新指向数组的第一个元素,并让它们以相同的速度继续移动,直到它们再次相遇。这次相遇的位置就是环的入口,也就是重复的数字。

Code

public class Solution {public int findDuplicate(int[] nums) {int slow = 0, fast = 0;do {slow = nums[slow];fast = nums[fast];fast = nums[fast];} while (slow != fast);slow = 0;while (slow != fast) {slow = nums[slow];fast = nums[fast];}return slow;}
}

相关文章:

  • QCombox绑定QMap
  • Map-JAVA面试常问
  • exzxml C语言XML解析库使用记录
  • selenium框架学习
  • Aigtek电压放大器的主要作用是什么
  • 华为手机数据恢复,2个技巧介绍,误删文件后的紧急处理
  • Python界面编辑器Tkinter布局助手 使用体验
  • 目标跟踪——KCF源码用python实现
  • 本地无法连接linux上的MariaDB数据库
  • 好用的便签是什么 电脑桌面上好用的便签
  • 【51单片机基础教程】点亮led
  • go编程中接口(interface)用法
  • springboot基于Web的社区医院管理服务系统 LW+ PPT+源码+讲解
  • 深入理解和实现Windows进程间通信(共享内存)
  • 防火墙规则来阻止攻击者的 IP 地址
  • 《剑指offer》分解让复杂问题更简单
  • Angular Elements 及其运作原理
  • angular2 简述
  • Computed property XXX was assigned to but it has no setter
  • Golang-长连接-状态推送
  • learning koa2.x
  • Less 日常用法
  • node.js
  • Python学习笔记 字符串拼接
  • Python学习之路16-使用API
  • Spark学习笔记之相关记录
  • Vue 动态创建 component
  • Webpack 4 学习01(基础配置)
  • 多线程 start 和 run 方法到底有什么区别?
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何学习JavaEE,项目又该如何做?
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-图和图算法
  • 微服务入门【系列视频课程】
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 回归生活:清理微信公众号
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (Java)【深基9.例1】选举学生会
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)模仿学习-完成后台管理页面查询
  • (学习总结16)C++模版2
  • (一)Dubbo快速入门、介绍、使用
  • (转载)Linux网络编程入门
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .FileZilla的使用和主动模式被动模式介绍
  • .net core + vue 搭建前后端分离的框架
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net