真是越做越觉得自己所学尚浅,,
啊???????
直接上石山代码:(过不了一点)。。。。。
class Solution:def firstMissingPositive(self, nums: List[int]) -> int:global jn=len(nums)if n==0:return 1if n==1:if nums[0]>=2 or nums[0]<=0:return 1else:return 2nums.sort()mn=0j=0for i in range(n-1):if nums[i]+1==nums[i+1]:j=icontinueelse:if nums[i]+1<=0:continueif nums[-1]<=0 or nums[0]>=2 or nums[i]>=2:return 1return nums[i]+1if j==n-2:if nums[0]<=1 and nums[-1]>=0:mn=nums[-1]+1else:mn=1return mn
太强了这思路哈希表:
class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n=len(nums)#hash表长hash_size=n+1for i in range(n):#超出范围先赋值为0if nums[i]<=0 or nums[i]>=hash_size:nums[i]=0for i in range(n):if nums[i]%hash_size!=0:pos=(nums[i]%hash_size)-1#先取余再加nums[pos]=(nums[pos]%hash_size)+hash_sizefor i in range(n):if nums[i]<hash_size:return i+1#就是n+1return hash_size
总结:我觉得一个关键点是将[1,n]外的点全部赋值为0,这样的话,我们就能将问题转换为[1,n]上,就能使用先前的哈希表方法了。。。