【LeetCode】41.缺失的第一个正数
283.移动零
知识点:数组;哈希表
题目描述
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例
解法一:
其实仔细想一下这道题,缺失的第一个正数,假设数组的长度为n,那答案是多少呢?答案其实只能在[1,n+1]之间,这些数都有,那答案就是n+1,数组里一旦缺失一个,那就在这之间了
所以可以新建一个哈希表,然后将数组中的数存到哈希表中,然后从1到n+1开始遍历,依次查看是否在哈希表里,第一个找到的不在的,那就是答案了;
为什么要用哈希表呢,因为哈希表查找的快啊,这样时间和空间复杂度都是n;
那怎么不创建新的空间呢,哈希表是什么,不就是一个key-value键值对吗?数组不也是这样的吗?其实哈希表就是一个数组对吧;
那我们就可以直接在原始数组上去进行操作了,比如一个数为x,那就可以把这个数放到索引为x-1的位置上去,这样我们不就自己构造了一个哈希表吗?前提是这个数x在索引的范围内,那这样一遍完后,在【1,n】范围内的元素就放在了“该在的位置上去”,也就是nums[i] = i+1,那再看一遍,从0到n-1的位置上那些有的值已经到了自己的位置,一旦不一样,那这个位置+1就是我们要找的元素了;
__EOF__

本文作者:Curryxin
本文链接:https://www.cnblogs.com/Curryxin/p/16070232.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Curryxin/p/16070232.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签