力扣hot100:(The Last one)287. 寻找重复数(快慢指针,静态链表)

LeetCode:287. 寻找重复数
在这里插入图片描述

“暴力”

不懂技巧,那就暴力!

哈希表
在这里插入图片描述

时间复杂度: O ( n ) O(n) O(n)

  • 这个题体现不出 O ( n ) O(n) O(n)的作用,因为 n < = 100 n <= 100 n<=100

空间复杂度: O ( n ) O(n) O(n)

class Solution {
public:int findDuplicate(vector<int>& nums) {unordered_map<int, int> mp;for(auto i : nums)mp[i]++;for(auto i : mp){if(i.second > 1) return i.first;}return -1;}
};

排序
在这里插入图片描述
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( 1 ) O(1) O(1)

class Solution {
public:int findDuplicate(vector<int>& nums) {sort(nums.begin(), nums.end());for(int i = 0; i < nums.size() - 1; ++ i){if(nums[i] == nums[i + 1])return nums[i];}return -1;}
};

快慢指针判环

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

由于本题的数组元素nums[i]的值均在数组下标之内,因此我们可以将元素的值当作数组下标,即当作静态链表
暂且认为,nums[i]表示i号元素的后继;0号元素当作链表头,其指向是nums[0]号元素。如果存在重复整数,则有多个元素的后继指向同一个位置。对于其他元素而言,它们的后继互不相同,因此可以构成一条静态链。

  • 例如:nums = [1,3,5,6,7,2,4,2,2]
  • 0号元素指向1号元素的位置
  • 1号元素指向3号元素的位置
  • 3号元素指向6号元素的位置
  • 6号元素指向4号元素的位置
  • 4号元素指向7号元素的位置
  • 7号元素指向2号元素的位置
  • 2号元素指向5号元素的位置
  • 5号元素指向2号元素的位置
  • 因此链表中存在环,我们需要找到的是环起点元素的下标,这表明有多个元素指向他,即这个指向元素是重复出现的。

链表,判环
LeetCode:环型链表

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)
在这里插入图片描述

class Solution {
public:int findDuplicate(vector<int>& nums) {int slow = 0, fast = 0;//初始时都指向0号位置do{//使用do-while结构,因为刚开始slow和fast是相等的。slow = nums[slow];fast = nums[nums[fast]];}while(slow != fast);int start = 0;while(nums[slow] != nums[start]){start = nums[start];slow = nums[slow];}return nums[slow];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链技术介绍和用法

区块链技术是一种分布式账本技术&#xff0c;可以记录和存储一系列交易信息&#xff0c;并通过密码学算法保证信息的安全性和不可篡改性。区块链技术的核心概念是“区块”和“链”。 每个区块包含了一部分交易信息&#xff0c;以及一个指向上一个区块的哈希值。当新的交易发生…

VirtualBox出错,从主机复制文件,乱改内容

昨天烧录机器&#xff0c;测试对方更新的一个库&#xff1a; 开始正确。后来莫名其妙崩溃。反复烧了几次&#xff0c;都错误。复制了老版本的库&#xff0c;正常。再改回新版本&#xff0c;崩溃。 于是把整个打包目录给了对方&#xff0c;他一对比&#xff0c;发现文件不对&am…

Windows应急响应靶机 - Web2

一、靶机介绍 应急响应靶机训练-Web2 前景需要&#xff1a;小李在某单位驻场值守&#xff0c;深夜12点&#xff0c;甲方已经回家了&#xff0c;小李刚偷偷摸鱼后&#xff0c;发现安全设备有告警&#xff0c;于是立刻停掉了机器开始排查。 这是他的服务器系统&#xff0c;请你…

Springboot获取resources中的文件

1.Springboot以文件的形式获取resources中的文件 import com.google.gson.JsonIOException; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import org.springframework.util.ResourceUtils; import j…

2024.6最新版eclipse下载与安装(汉化教程)超详细教程来咯!!!包懂的

1.eclipse简介 Eclipse 是一个开放源代码的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java编程&#xff0c;但也可以通过插件支持其他编程语言&#xff0c;如C/C、Python、Perl等。Eclipse 被广泛应用于企业环境中&#xff0c;特别是在Java社区中&#xff0…

PyMuPDF 操作手册 - 02 PDF 中图像的提取、插入、创建等

文章目录 三、PDF 中提取和插入图像3.1 从 PDF 中提取图像3.2 提取矢量图形3.3 向 PDF 添加图像3.4 如何从文档页面制作图像3.5 如何提高图像分辨率3.6 如何创建局部像素贴图(剪辑)3.7 如何将剪辑缩放到 GUI 窗口3.8 如何创建或隐含注释图像3.9 如何提取图像:非 PDF 文档3.1…

selenium常见难点解决方案

勾选框勾选问题 勾选框代码逻辑实现过程&#xff1a; 第一步&#xff1a;首先找到勾选框的元素&#xff1b; 第二步&#xff1a;检查它是否已经被勾选。如果已经勾选&#xff0c;则进行取消勾选操作&#xff1b;如果未勾选&#xff0c;则进行点击勾选操作&#xff1b; 以下是一…

NGINX_十四 nginx 日志配置

十四 nginx 日志配置 1 nginx 日志介绍 ​ nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持&#xff0c;日志格式通过 log_format 命令来定义&#xff0c;日志对于统计和排错是非常有利的&#xff0c;…

详解 ClickHouse 的 SQL 操作

传统关系型数据库&#xff08;以 MySQL 为例&#xff09;的 SQL 语句&#xff0c;ClickHouse 基本都支持 一、插入 --语法&#xff1a; insert into table_name values(xxxxxx),(yyyyyyy),...;insert into table_name select xxxxx from table_name2 where yyyyy;二、更新和删…

代码随想录算法训练营第41天 [01背包的理论基础,二维数组解法,一维数组解法,416. 分割等和子集]

代码随想录算法训练营第41天 [01背包的理论基础&#xff0c;二维数组解法&#xff0c;一维数组解法&#xff0c;416. 分割等和子集] 一、01背包的二维数组解法 链接: 代码随想录. 思路&#xff1a;dp数组, dp[i][j]代表行李箱空间为j的情况下,从下标为[0, i]的物品里面任意取,能…

本次刷题的错题模版分析-2024年6月21日

对于错题进行分析是一个非常好的学习习惯&#xff0c;这有助于你理解自己的错误并避免将来再次犯同样的错误。以下是一个错题分析的模板&#xff0c;你可以根据自己的需要进行调整&#xff1a; 1. 错题记录 题目&#xff1a;[下列关于数组运算的描述错误的是( )。 在NumPy中&am…

C# —— 属性和字段

属性和字段的区别 1.都是定义在一个类中&#xff0c;属于类成员变量 2.字段一般都是私有的private&#xff0c;属性一般是公开的Public 3.字段以小驼峰命名方式 age&#xff0c;属性一般是以大驼峰命名 Age 4.字段可以存储数据&#xff0c;属性不能存储数据&#xff0c;通过属性…

audacity音频处理

1.安装 Audacity | Free Audio editor, recorder, music making and more! 添加OpenVINO插件: https://zhuanlan.zhihu.com/p/676542556 2.使用 2.1注意事项 1.编辑音频,点击左上方打开或导入都可以;打开视频文件则需要安装ffmpeg模块,打开后只显示视频中的音频信息; 2.编辑…

P5712 【深基3.例4】Apples

1. 题目链接 https://www.luogu.com.cn/problem/P5712 P5712 【深基3.例4】Apples 2. 题目描述 题目描述&#xff1a;小B吃了x个苹果&#xff0c;用Today, I ate x apple.造句 输入&#xff1a;输入一个自然数x 输出&#xff1a;句子 3. 我的思考 用if-else判断就行 4. 我提交…

可变分区管理 分区分配算法

First Fit Algorithm Best Fit Algorithm FFA&#xff1a;按照分区编号找到第一个能装下进程的起始地址填入第二个表 此时 原表中将起始地址进程大小 分区大小-进程大小 如此继续 BFA&#xff1a;按分区大小排序 从小到大 找到第一个能装下的 剩余步骤和FFA一样 装满了可以直…

ls命令的参数选项

ls命令的参数的作用 可以指定要查看的文件夹&#xff08;目录&#xff09;的内容&#xff0c;如果不指定参数&#xff0c;就查看当前工作目录的内容。ls 命令的选项 常用语法&#xff1a;ls [-a -l -h] [linux路径] -a 选项表示 all &#xff0c;即列出全部内容&#xff0c;包括…

JAVA学习-练习试用Java实现“不同的子序列”

问题&#xff1a; 给定一个字符串 s 和一个字符串 t &#xff0c;计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置所组成的新字符串。&#xff08;例如&#xff0c;&…

Linux下find命令使用介绍

Linux下的find命令是一个功能强大的文件搜索工具&#xff0c;它能够遍历指定目录层次结构&#xff0c;根据一系列预设条件来查找并操作文件和目录。find命令的灵活性在于它支持多种查找条件和操作&#xff0c;使得用户能够非常精确地定位文件系统中的内容。下面是find命令的一些…

北航数据结构与程序设计图部分选填题

一、 抓两个关键信息&#xff1a;无向图&#xff0c;邻接表。无向图中&#xff0c;边&#xff08;vi&#xff0c;vj&#xff09;要在vi的链表中记录一次&#xff0c;再以&#xff08;vj&#xff0c;vi&#xff09;的形式在vj的链表中记录一次。 每个边都要记录两次&#xff0c…

文心一言 VS 讯飞星火 VS chatgpt (285)-- 算法导论21.2 4题

四、请给出图 21-3 所示操作序列的一个运行时间的渐近紧确界&#xff0c;假定使用链表表示和加权合并启发式策略。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 图 21-3 没有直接给出&#xff0c;但通常这种操作序列可能与某种数据结构&#xff08;如并查集或…