题解 | #缺失的第一个正整数# 妙蛙
缺失的第一个正整数
https://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
// 先使用 哈希来坐下 这时当然空间复杂度还没达到进阶要求
// 不适用额外空间
// 官解 原地哈希
int minNumberDisappeared(vector<int>& nums) {
// write code here
int n = nums.size();
for(int i=0; i<n; ++i)
{
if(nums[i]<=0) // 菲正数 标记为n+1
nums[i] = n+1; //n+1
}
// 因为要么缺少n+1 要么缺少[1,n]的数字
for(int i=0; i<n; ++i)
{
if(abs(nums[i])<=n) // 使用绝对值是因为之前它的值可能被改为负数
{
// 此数字对应的下标
nums[abs(nums[i])-1] = -1 * abs(nums[abs(nums[i])-1]);
}
}
int ans = n+1; // 初始答案
for(int i=0; i<n; ++i)
{
if(nums[i]>0)
{
ans = i+1; // 一旦遇到此下表 上没见过 那就返回 否则就是n+1
break;
}
}
return ans;
}
};
所谓原地哈希 自己来标记
查看17道真题和解析
