题目
基本思路
分析一下:因为是最小的整数,
反正是从1,2,3。。。。开始的。
那就把每一个数,给到他们自己的位置,比如说【3,4,-1,1】
把所有的数都放到位置:变成【1,-1,3,4】 那就能找到 那个-1的位置了。
因为要常数空间,那估计的言外之意就是,交换swap。
- 不过这里面有坑,首先【2,3】这样的,3就不能换,也就是说大过数组长度的不要动。
- 而且小于0的也不能换,
- 还有这个【3,4,-1,1】如果只换一次。。
先换3,变成【-1,4,3,1】
然后4 变成【-1,1,3,4】
哎到头了。。。这个1怎么办。。。
所以要不停的换,换到不能换了为止:
改成:
先换3,变成【-1,4,3,1】,第一个位置是-1,不能换了
再还4,变成【-1,1,3,4】,第二个位置是1,继续换【1,-1,3,4】
后面就不换了。。。 - 还有一个坑:【1,2,3】。。。换到头了,怎么办,返回4。
实现代码
class Solution:
def firstMissingPositive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
length = len(nums)
for i in range(length):
if nums[i] > length:
continue
index = nums[i]-1
while nums[i] > 0 and index < length and nums[i] != nums[index]:
nums[i],nums[index] = nums[index],nums[i]
index = nums[i] - 1
for m in range(length):
if nums[m] != m +1:
return m +1
return length+1