41.First Missing Positive
找到第一个丢失的正数,也可以说是丢失的最小正数
题干:
Given an unsorted integer array, find the smallest missing positive integer
解释:
题干具有迷惑性,实际上这个题是让找到第一个和下标不对应的正数。有两个关键点: 1,和下标不对应 2,正数
思考:
根据上面的分析,我们首先要做的就是把原本的数字放到和下标对应的位置上,然后遍历一遍找到第一个不对应的点。 使用cylic sort即可。每次把当前位置的点和应该放的点交换,直到无法交换为止。
答案:
class Solution(object):
def firstMissingPositive(self, nums):
for i in range(len(nums)):
while nums[i]>0 and nums[i]<=len(nums) and nums[i]!=nums[nums[i]-1]:
self.swap(nums,i,nums[i]-1)
for i in range(len(nums)):
if nums[i]!=i+1:
return i+1
return len(nums)+1
def swap(self,nums,i,j):
a = nums[i]
nums[i]=nums[j]
nums[j]=a
答案补充:
注意交换函数的写法,以及本题是nums【i】 和nums【nums【i】-1】进行交换