给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
https://leetcode-cn.com/problems/first-missing-positive/
示例1:
示例2:
示例3:
提示:
Java解法
package sj.shimmer.algorithm.ten_3;
/**
 * Created by SJ on 2021/2/17.
 */
class D24 {
    public static void main(String[] args) {
        System.out.println(firstMissingPositive(new int[]{1,2,0}));
        System.out.println(firstMissingPositive(new int[]{3,4,-1,1}));
        System.out.println(firstMissingPositive(new int[]{7,8,9,11,12}));
        System.out.println(firstMissingPositive(new int[]{1}));
    }
    public static int firstMissingPositive(int[] nums) {
        if (nums == null||nums.length==0) {
            return 1;
        }
        int[] n = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i]-1;//-1表示位置进行前移一位,0不为正数
            if (num>nums.length-1||num<0) {
                continue;
            }
            n[num] = ++n[num];
        }
        for (int i = 0; i < n.length; i++) {
            if (n[i]==0) {
                return i+1;
            }
        }
        return n.length+1;
    }
}

官方解
角度算法都可以,但效率都没有特别好。。。
- 
哈希表 - 时间复杂度:O(N)
- 空间复杂度:O(1)
 
- 
置换 - 时间复杂度:O(N)
- 空间复杂度:O(1)
 










