借鉴计数排序的思想


import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */
    public int minNumberDisappeared (int[] nums) {
        if(nums.length<=1) return 1;
      //找最大
        int len = findMax(nums);
      //创建计数数组
        int[] counts = new int[len+1];
        //统计计数(借鉴计数排序里面的思想)
        for(int i=0; i<nums.length; i++){
            if(nums[i]>0){
                counts[nums[i]]++;
            }
        }
      //找缺失值:默认最大的缺失值为数组的最大值
        int miss = len+1;
        for(int i=1; i<=len; i++){
          //如果找到计数数组里面没有被计数的下标,则为缺失
            if(counts[i]<=0){
                miss = Math.min(i, miss);
            }
        }
        return miss;
    }
    public int findMax(int[] nums){
      //找数组的最大值:最小为数组的长度
        int max = nums.length;
        for(int i=0; i<nums.length; i++){
            max = Math.max(nums[i], max);
        }
        return max;
    }
}