题解 | #缺失的第一个正整数#
缺失的第一个正整数
https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5
2022.0808算法第19题缺失的第一个正整数
哈希表也能解决这个问题,思路也很简单。
缺失的第一个正整数肯定是1-n+1之间的数,n为数组内元素的个数
因此只需要将数组内的元素存入哈希表,然后判断1-n+1之间的最小的不在hash中的数。
不采用hash存储时,也可以通过数组本身存储元素的特征,数组本身具有下标和值两个属性。
首先将非正数赋值为n+1,
for(int i=0;i<nums.size();i++){ if(nums[i]<=0) nums[i]=nums.size()+1; }然后此时数组里的值变成1-n+1之间,
将数组元素的值,对应的下标的值赋值为负
for(int i=0;i<nums.size();i++){ if(abs(nums[i])<=nums.size()){ nums[abs(nums[i])-1]=abs(nums[abs(nums[i])-1])*-1; } }这样第一个正数对应的下标就是数组缺失的第一个正整数
for(int i=0;i<nums.size();i++) if(nums[i]>0) return i+1;