每天两道LeetCodeHard:(6)

114 阅读1分钟

41.First Missing Positive

找到第一个丢失的正数,也可以说是丢失的最小正数

题干:

Given an unsorted integer array, find the smallest missing positive integer

解释:

题干具有迷惑性,实际上这个题是让找到第一个和下标不对应的正数。有两个关键点: 1,和下标不对应 2,正数

思考:

根据上面的分析,我们首先要做的就是把原本的数字放到和下标对应的位置上,然后遍历一遍找到第一个不对应的点。 使用cylic sort即可。每次把当前位置的点和应该放的点交换,直到无法交换为止。

答案:

class Solution(object):
    def firstMissingPositive(self, nums):
        for i in range(len(nums)):
            while nums[i]>0 and nums[i]<=len(nums) and nums[i]!=nums[nums[i]-1]:
                self.swap(nums,i,nums[i]-1)
        for i in range(len(nums)):
            if nums[i]!=i+1:
                return i+1
        return len(nums)+1
    def swap(self,nums,i,j):
        a = nums[i]
        nums[i]=nums[j]
        nums[j]=a

答案补充:

注意交换函数的写法,以及本题是nums【i】 和nums【nums【i】-1】进行交换