41. 缺失的第一个正数

2018-12-25  本文已影响0人  calm_peng
给定一个未排序的整数数组,找出其中没有出现的最小的正整数。

示例 1:

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

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

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

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

/*
思路:给定的数组nums不管里面的值是什么 结果的答案 肯定是在 1--nums.length+1中 可以看哪些有 有的话 就可以记录 最后 遍历 发现最小的没有的 
空间复杂度:O(n)
*/
class Solution {
    public int firstMissingPositive(int[] nums) {
        if(nums.length<=0)
            return 1;
        
        
        boolean[] temp = new boolean[nums.length+1];
        for(int i = 0;i<nums.length;i++){
            if(nums[i]>nums.length || nums[i]<=0)
                continue;
            else
                temp[nums[i]-1] = true;
        }
        for(int i = 0;i<=nums.length;i++){
            if(temp[i] == false)
                return i+1;
        }
            
        return nums.length;
        
    }
}
空间复杂度:O(1)
class Solution {
    public int firstMissingPositive(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 1;
        }
        for (int i = 0; i < nums.length; i++) {
            while (0 < nums[i] && nums[i] <= nums.length && nums[i] != nums[nums[i]-1]) {
                int temp = nums[nums[i] - 1];
                nums[nums[i] - 1] = nums[i];
                nums[i] = temp;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != i + 1) {
                return i + 1;
            }
        }
        return nums.length + 1;
    }
}

leetcode

上一篇下一篇

猜你喜欢

热点阅读