lc 41. First Missing Positive

Posted waldenlake

tags:

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

https://leetcode.com/problems/first-missing-positive/

O(1)空间复杂度,找到最小的没有出现在nums中的正整数。

其实算不上严格的swap,因为不用交换,当前的位置上如果不是正确放置的(不是正确放置:nums[i]!=i)那么,就把这个数字放到正确的位置上去,不会有死循环

因为你永远不会重复处理同一个数字

小技巧:

1.强行添加一个0,把问题变成i==nums[i]的问题,否则比较复杂

2.强行添加一个len(nums)+10,保证问题的answer在len(nums)之内。就是避免给你[2,3,4,1]这种答案为5在nums之外的情况

3.while比递归好看

代码:

class Solution:
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums+=[0,len(nums)+10]
        for i in range(len(nums)):
            n=nums[i]
            while 0<=n<len(nums) and n!=nums[n]:
                next=nums[n]
                nums[n]=n
                n=next
        for i in range(len(nums)):
            if nums[i]!=i:
                return i

 

以上是关于lc 41. First Missing Positive的主要内容,如果未能解决你的问题,请参考以下文章

41. First Missing Positive *HARD*

41. First Missing Positive

LeetCode 41. First Missing Positive

java 41. First Missing Positive(#)。java

java 41. First Missing Positive(#)。java

java 41. First Missing Positive(#)。java