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

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