给一个未排序的数组,找出第一个缺失的正整数。
例如,[1,2,0]
返回 3
,[3,4,-1,1]
返回 2
。
你的算法应该在 O(n) 的时间复杂度内完成并且使用常数量的空间。
解题思路:
这道题感觉比之前的题目都要难许多,因为限定了算法的时间复杂度所以并不能通过普通排序来完成,但我们可以通过桶排序来实现,意思是这个数组要实现第i个元素等于i+1,然后遍历整个数组,从小到大把每一个位置填满,最后再遍历一遍,找到数字与桶不对应的那个点。
解题代码:
i=0
while i<len(nums):
if 0<nums[i]<=len(nums) and nums[nums[i]-1]!=nums[i]:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
else:
i+=1
for i in range(len(nums)):
if nums[i]!=i+1:
return i+1
return len(nums)+1
疑惑:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]