美文网首页
缺失的第一个正数

缺失的第一个正数

作者: 小幸运Q | 来源:发表于2021-04-05 16:10 被阅读0次

    image.png

    例:将1-100映射到nums[0-99],超出的不用管,思路参考 剑指 Offer 03. 数组中重复的数字,为什么0要映射1?因为映射0的话会很麻烦,[0,1]的情况下解是2,[1]的情况下解也是2,自己体会。

    最后将所有值n归位到对应nums[n-1],从0位扫到到n-1位,发现nums[i]!=i+1就跳出,i+1就是解。如果最优值是初始值-1,那么确实的第一个正数就是大于[1,len(nums)]的第一个数。

    class Solution:
        def firstMissingPositive(self, nums: List[int]) -> int:
            if len(nums)==0:
                return 1
            for i in range(len(nums)):
                if (nums[i]!=i+1):
                    n=nums[i]
                    while(n-1>=0 and n-1<len(nums) and n!=nums[n-1]):
                        t=nums[n-1]
                        nums[n-1]=n
                        n=t
            res=-1
            for i in range(len(nums)):
                if(i+1!=nums[i]):
                    res=i+1
                    break
            if res==-1:
                return len(nums)+1
            else:
                return res
    

    相关文章

      网友评论

          本文标题:缺失的第一个正数

          本文链接:https://www.haomeiwen.com/subject/trudkltx.html