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