边工作边刷题:70天一遍leetcode: day 33-1

First Missing Positive

要点:因为值是range固定的,所以利用了slot的index作为mark。注意内循环的条件是目标的value和index不匹配而不是当前值所在slot的index,因为当前slot对应的值可能不存在,就算存在,也应该由其他slot移动过来。
错误点:

  • 值的有效范围是1到len(nums),所以如果全有,返回len(nums)+1
  • 注意下标的范围是0到len(nums)-1,所以在对应下标和值时要做范围检查。
class Solution(object):
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for i in range(len(nums)):
            while nums[i]>0 and nums[i]<=len(nums) and nums[i]!=nums[nums[i]-1]:
                tmp = nums[nums[i]-1]
                nums[nums[i]-1]=nums[i]
                nums[i]=tmp
            
        for i in range(len(nums)):
            if nums[i]!=i+1:
                return i+1
                
        return len(nums)+1
原文地址:https://www.cnblogs.com/absolute/p/5678178.html