【LeetCode】442.数组中重复的数据
283.移动零
知识点:数组;原地哈希
题目描述
给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。
你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。##### 示例
解法一:原地哈希
涉及到这种重复的,其实第一时间应该想到hashset,就遍历一遍,然后把数据都存到哈希集合里,if已经添加过了,那就是重复的;
但是题目要求不能开辟新的空间,那怎么办呢,我们可以自己构建一个哈希表,这个哈希表就是我们本身的数组,想一下我们为什么需要哈希,因为哈希有快速查找的特性,也就是能在1时间复杂度查找是否包含,那我们可以用这个原始数组来标记是否出现过,怎么做呢,正好发现这个数组的范围就是1-n,那我们就可以把元素x用第x个位置上的元素去做标记,比如说,我们可以给这个位置上的元素都加上一个数字n,等到它自己的时候再减去这个数n,这样也不影响人家本身,if出现过两次,那这个数一定是大于2n的,这不就判断出来了吗?再或者,我们可以直接去取反,当用到人家自己的时候再用绝对值就行了,if发现这个元素是负的,那证明这是出现的第二次了。就是这个思想,其实就是在原地构建了一个哈希表;
__EOF__

本文作者:Curryxin
本文链接:https://www.cnblogs.com/Curryxin/p/16070991.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Curryxin/p/16070991.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库