题解 | #缺失的第一个正整数# 妙蛙
缺失的第一个正整数
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; } };
所谓原地哈希 自己来标记