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

缺失的第一个正整数

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
     public int minNumberDisappeared (int[] nums) {

        int len = nums.length;
        if (len==0){
            return 1;
        }
        // 先原地哈希一下, 俗称找家 。家要满足  nums[i] = i+1;  也就是  下标为0 的放 数字 1
        for(int i = 0;i<len;i++){
            // 我们要做的就是让能回家的回家,然后从1 开始看谁没回家,就是第一个正整数
            // 1: nums[i] > 0 为了避免 nums[0-1] = nums[-1] 造成的索引越界
            // 2: nums[i] <=len  [7,8,9,11,12] 这种情况没办法找到家,就不用动。
            // 3: nums[nums[i]-1] != nums[i] 判断 当前值的家是不是当前值
            //  - 是 不用管
            //  - 不是  就要把当前值换到对应的位置
            while(nums[i] > 0  && nums[i] <= len && nums[nums[i]-1] != nums[i]){
                // 把 当前值 和 他家位置的值换位置
                int temp = nums[i];
                nums[i] = nums[temp-1];
                nums[temp-1] = temp;


            }
        }
        // 判断家里待的是不是对应的人
        for(int i =0;i<len;i++){
            if(nums[i]!=i+1){
                return i+1;
            }
        }

        return len+1;
    }

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务