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