题目
Given an unsorted integer array, find the smallest missing positive integer.
解题思路
如果数组的长度是l,那么结果最大就是l+1,所以吧所有负数和大于l+1的数,都变成0,给数组加一个0(处理0的情况),然后遍历数组,把数对应下标的数加上l+1,最后再遍历一遍,第一个小于等于l的数,就是结果
代码
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
nums.append(0)
l = len(nums)
if l == 1:
return 1
for i in range(l):
if nums[i] < 0 or nums[i] >= l:
nums[i] = 0
for i in range(l):
nums[nums[i] % l] += l
for i in range(1, l):
if nums[i] < l:
return i
return l