BM4(BM53) 缺失的第一个正整数

描述

给定一个无重复元素的整数数组nums,请你找出其中没有出现的最小的正整数

进阶: 空间复杂度 Java练习题—哈希(三)_整型,时间复杂度 Java练习题—哈希(三)_一维数组_02

数据范围:

Java练习题—哈希(三)_java_03

Java练习题—哈希(三)_java_04

示例1

输入:

[1,0,2]

复制

返回值:

3

复制

示例2

输入:

[-2,3,4,1,5]

返回值:

2

示例3

输入:

[4,5,6,8,9]

返回值:

1

解析

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int minNumberDisappeared (int[] nums) {
        // write code here
        if (nums == null || nums.length == 0) return -1;

        Arrays.sort(nums);

        int min = 1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 1) {
                continue;
            } else if (nums[i] == min) {
                min++;
                continue;
            }
        }
        return min;
    }
}


import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int minNumberDisappeared (int[] nums) {
        // write code here
        Arrays.sort(nums);
        int res = 1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] <= 0) {
                continue;
            }
            if (res != nums[i]) {
                return res;
            } else {
                res++;
            }
        }
        return res;
    }
}


import java.util.*;
import java.util.stream.Collectors;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int minNumberDisappeared (int[] nums) {
        List<Integer> collect = Arrays.stream(nums).boxed()
                                .filter(item -> item > 0)
                                .sorted(Comparator.naturalOrder())
                                .collect(Collectors.toList());
        boolean isFirst = true;
        if (collect.size() == 0) {
            return 1;
        } else if (collect.size() == 1) {
            return (collect.get(0) != 1) ? 1 : 2;
        }
        for (int i = 0; i < collect.size() - 1; i++) {
            int val1 = collect.get(i);
            int val2 = collect.get(i + 1);
            if (isFirst && val1 > 1) return 1;
            if (val2 - val1 > 1) return val1 + 1;
            isFirst = false;
            if (i == collect.size() - 2) return val2 + 1;
        }
        return 1;
    }
}