缺失的第一个正整数

给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。

 

示例 1:

输入: [1,2,0]
输出: 3
示例 2:

输入: [3,4,-1,1]
输出: 2
示例 3:

输入: [7,8,9,11,12]
输出: 1
 

提示:

你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间

package leetcode;

import java.util.HashSet;
import java.util.Set;

public class FirstMissPositiveSolution {
    int firstMissPositive(int[] nums){
        int len = nums.length;
        Set<Integer> hashSet = new HashSet<>();
        for(int num : nums){
            hashSet.add(num);
        }
        for(int i = 1 ;i < len ;i++){
            if(! hashSet.contains(i)){
                return i;
            }
        }
        return  len+1 ;
    }
    public static void main(String[] args){
        int[] nums={-1,1,2,4,0,3,58,1};
        int result = new FirstMissShuSolution().firstMissShu(nums);
        System.out.println(result);
    }
}

 

package leetcode;

import java.util.Arrays;

public class FirstMissShuSolution {
    int firstMissShu(int[] nums){
        if(nums == null){
            return 1;
        }
        Arrays.sort(nums);

        int compare = 0 ;
        for(int i=0 ;i < nums.length; i++){
            if(nums[i] <= 0 ){
                continue;
            }
            if(i > 0 && nums[i-1] == nums[i]){
                continue;
            }
            compare++;
            if(compare < nums[i]){
                return  compare;
            }
        }
        return compare+1;
    }
    public static void main(String[] args){
        int[] nums={0,-1,-2,2,3,4,5,6,78};
        int n = new FirstMissShuSolution().firstMissShu(nums);
        System.out.println(n);
    }
}

 

posted on 2020-11-01 00:23  凌晨三点半的飞机  阅读(88)  评论(0编辑  收藏  举报