力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

我们可以直接将数组中的数放到哈希表中,然后遍历[1,n],n为数组的大小,当遍历到某个数没有出现过的时候,就返回,若遍历完毕也没有,则返回n+1。
1、将负数转换为n+1
2、将在[1,n]的数转化为负数并且赋值到该数组对应数-1的下标位置
注意:切记切记我们在进行第二步的时候需要注意的是,遍历的这个位置
很可能之前已经被标记了,也就是已经被赋值为负数了,因此我们需要检测的是
它的绝对值是否符合条件,然后再使用该值进行进行进一步的赋值给对应绝对值数-1
的下标位置
3、返回数组中第一个不为负数的数+1
- class Solution
- {
- public:
- int firstMissingPositive(vector<int>& nums)
- {
- unordered_map<int,int> hash;
- for(auto&e:nums) hash[e]++;
- for(int i=1;i<=nums.size();i++)
- {
- if(hash[i]==0) return i;
- }
- return nums.size()+1;
- }
- };
- class Solution
- {
- public:
- int firstMissingPositive(vector<int>& nums)
- {
- int n=nums.size();
- // 1、将负数转换为n+1
- // 2、将在[1,n]的数转化为负数并且赋值到该数组对应数-1的下标位置
- // 注意:切记切记我们在进行第二步的时候需要注意的是,遍历的这个位置
- // 很可能之前已经被标记了,也就是已经被赋值为负数了,因此我们需要检测的是
- // 它的绝对值是否符合条件,然后再使用该值进行进行进一步的赋值给对应绝对值数-1
- // 的下标位置
- // 3、返回数组中第一个不为负数的数+1
- for(int&in:nums)
- {
- if(in<=0) in=n+1;
- }
-
- for(int i=0;i
- {
- int num=abs(nums[i]);
- if(num<=n)
- {
- int k=num-1;
- nums[k]=-abs(nums[k]);
- }
- }
-
- for(int i=0;i
- {
- if(nums[i]>0) return i+1;
- }
- return n+1;
- }
- };
-
相关阅读:
【无标题】
6.0、软件测试——判定表法
MODB:软体动物线粒体基因组数据库
VsCode Ctrl+.修复无效
【哈希】关于哈希的实现、冲突的解决、扩容等
利用C++11 实现:迷你线程池+CAS自旋锁
GPS北斗卫星授时服务器架设具体有哪几步?
蓝桥等考Python组别十级008
MySQL建立主-从服务器双机热备配置
小型时间继电器ST3PA-C DC24V 带插座PF085A 导轨安装 JOSEF约瑟
-
原文地址:https://blog.csdn.net/m0_57249790/article/details/132847206