lc 41. First Missing Positive
阿新 • • 發佈:2019-01-10
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