题目:
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
解答:
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
#答案位于[1,n+1]之间,若[1,n]都在数组中,则答案为n+1;否则答案位于[1,n]之间
n=len(nums)
#将负数变为n+1
for i,num in enumerate(nums):
if num<=0:
nums[i]=n+1
#对[1,n]之间的数cur做标记,将位于索引cur-1处的数置为负
for i,num in enumerate(nums):
cur=abs(num)
if 0<cur<n+1 and nums[cur-1]>0:
nums[cur-1]=-nums[cur-1]
for i in range(n):
#nums[i]不为负,即未被标记,说明i+1未曾出现
if nums[i]>0:
return i+1
return n+1