1. 程式人生 > >lc 41. First Missing Positive

lc 41. First Missing Positive

swa 正整數 -m urn bsp ng- != pan etc

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