nums的长度为n,所以缺失的第一个正整数要么在[1,n]中,要么是n+1。将nums中的负数修改为n+1,然后遍历nums数组,当碰到的元素<=n时,表示此元素在[1,n]中出现过,将它标记为负数。再次遍历nums碰到的第一个非负数的下标表示没有出现过,否则未出现的元素为n+1。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minNumberDisappeared(vector<int>& nums) {
        int n=nums.size();
        for(auto& x: nums) if(x<=0) x=n+1;
        for(auto& x: nums) if(abs(x)<=n) nums[abs(x)-1]=-1*abs(nums[abs(x)-1]);
        for(int i=0;i<n;i++){
            if(nums[i]>0) return i+1;
        }
        return n+1;
    }
};