41. First Missing Positive

image

题目链接

前言

不是很明白这题为什么是hard,可能我的思路不对……?

描述

无序数组,找到第一个缺少的最小正整数。

思路

1.第一眼看到这个题是这个思路:先用set集合存下array,然后遍历数组,判断set集合中是否包含当前值,不包含直接返回即可。
ps: 这里set通过contains查找元素的时间复杂度是o(1),所以整体时间复杂度是o(n)

2.先把数组排好序,然后遍历排序后的数组,找到缺少的最小正整数。

代码

方法一:
class Solution {
    public int firstMissingPositive(int[] nums) {
        Set tmp = new HashSet();
        for(int i = 0; i < nums.length; i++){
            tmp.add(nums[i]);
        }
        int i = 0;
        for(; i < nums.length; i++){
            if(!tmp.contains(i + 1)){
                return i + 1;
            }
        }
        return i + 1;
    }
}
方法二:
class Solution {
    public int firstMissingPositive(int[] nums) {
        for(int i=0; i < nums.length; i++){
            int val = nums[i];
            while(val<=nums.length && val > 0 && val != nums[val-1]){
                if(val <= nums.length){
                    int tmp = nums[val-1];
                    nums[val-1] = val;
                    val = tmp;
                }
            }
        }
        for(int i=0; i

你可能感兴趣的:(41. First Missing Positive)