力扣(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;
- }
- };
-
相关阅读:
数据分析-相关性
接口测试实战| GET/POST 请求区别详解
计算机组成原理·考点知识点整理
StringUtils 系列之 StringUtils.isBlank() 和 StringUtils.isNotBlank() 的区别、CollectionUtils.isEmpty()
精益制造、质量管控,盛虹&百世慧共同启动MOM(制造运营管理)
java日志框架之Log4j
【Hack The Box】windows练习-- Timelapse
技术干货:spring boot面试题及答案
Python仪表板巨人之战 Streamlit vs Dash vs Voilà vs Panel
第十章 配置 IIS 以与 Web 网关配合使用 (Windows) - 映射 InterSystems IRIS 文件扩展名
-
原文地址:https://blog.csdn.net/m0_57249790/article/details/132847206