题解 | #缺失的第一个正整数#
缺失的第一个正整数
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;
}
}
