要找出一个数组nums中缺失的第一个正整数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。
采用原地Hash的思想。
因为Hash可以做到时间复杂度是N,但是做不到空间复杂度也是N,所以需要把空间复杂度从N降成1,就是说不能再要一个额外的数组空间。
可以在原来的nums数组上做文章。
数组长度为N,那么缺失的第一个正整数就是在1-N+1的范围之内,我们先把数组中所有的非正整数转换成N+1,再利用负数来标记已经出现过的数字,最后只需要找没有负数的下标就可以了。
代码如下:
class Solution: def firstMissingPositive(self, nums: List[int]) -> int: N=len(nums)#整个数组的长度 for index in range(0,N):#这里需要注意只能通过下标来改变数组里面的内容 if nums[index]<=0:#如果是非正整数 nums[index]=N+1#值修改为N+1 for num in nums: if abs(num)>N:continue#如果值大于等于N+1,那么不进行标记,因为也标记不了,但是有答案限制 else:#如果数字对应的下标没有被标记成为负数,则把数字对应的下标标记成为负数(1-N依次对应下标0-N-1) if nums[abs(num)-1]>0:nums[abs(num)-1]=-nums[abs(num)-1] for index in range(0,N): if nums[index]>0:return index+1#如果下标为正整数则没有被标记,返回 return N+1#否则答案就是N+1