41. 缺失的第一个正数

Posted 潜行前行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了41. 缺失的第一个正数相关的知识,希望对你有一定的参考价值。

  1. 缺失的第一个正数

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

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1:

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

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

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

提示:

1 <= nums.length <= 5 * 105
-231 <= nums[i] <= 231 - 1
通过次数221,132提交次数519,587

关键点

  • 原地哈希。小于 1 的元素转为大于数组个数的值,如:size+1。然后以元素值为下标,小于等于 n ,数组中对应值设置为 负数。从左往右遍历数组,第一个不为负数,则表示其下标元素不存在。
class Solution 
    public int firstMissingPositive(int[] nums) 
        for(int i=0; i<nums.length; i++)
            if(nums[i] <= 0) // 零和负数设置为正数
                nums[i] = nums.length + 1;
            
        
        for(int i=0; i<nums.length; i++)
            int index = Math.abs(nums[i]);
            if(index <= nums.length ) 
                nums[index-1] = -Math.abs(nums[index-1]); //下标存在则为零
            
        
        for(int i=0; i<nums.length; i++)
            if(nums[i] > 0 )
                return i+1;
            
        
        return nums.length+1; // [1,2,3] 则是 4
    

以上是关于41. 缺失的第一个正数的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode 41.] 缺失的第一个正数

[leetcode] 41. 缺失的第一个正数

leetcode 41 缺失的第一个正数

LeetCode 41. 缺失的第一个正数(First Missing Positive)

41. 缺失的第一个正数

41. 缺失的第一个正数