题解 | #缺失的第一个正整数#

缺失的第一个正整数

http://www.nowcoder.com/practice/50ec6a5b0e4e45348544348278cdcee5

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;
    }
};


全部评论
有bug
1 回复 分享
发布于 2022-02-04 10:42
有bug,数组是无序的,{5,1,2},很明显缺失的第一个正整数是3,按你这个取值是1
点赞 回复 分享
发布于 2022-04-08 21:08
对当前数组直接更改,显然会影响到后续的遍历
点赞 回复 分享
发布于 2022-03-07 16:23

相关推荐

点赞 评论 收藏
分享
04-09 09:47
门头沟学院 Java
Arbelite_:2-3k,这工资还不如去摇奶茶
点赞 评论 收藏
分享
评论
16
2
分享

创作者周榜

更多
牛客网
牛客企业服务