Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0]
return 3
,
and [3,4,-1,1]
return 2
.
Your algorithm should run in O(n) time and uses constant space.
这题对时间,空间都有要求,一般的排序必然会超时。扫描的时候,当遇到正数,而且这个正数小于数组长度就把它交换到下标和它一样的位置上。
这样,扫描完成之后,从1的位置开始判断,如果位置k上存的数字不是k,这就是缺少的第一个正数。
class Solution(object):
def firstMissingPositive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
L=len(nums)
for m in range(L):
if nums[m]>L:
continue
val = nums[m]-1
while nums[m]>0 and val<L and nums[val] != nums[m]:
nums[m],nums[val]=nums[val],nums[m]
val = nums[m]-1
for m in range(len(nums)):
if nums[m] != m +1:
return m +1
return L+1