给定一个无序数组arr,找到数组中未出现的最小正整数
例如
arr = [-1, 2, 3, 4]。返回1
arr = [1, 2, 3, 4]。返回5
arr = [6, 1, 2, 3, 4, 7]。返回5
[要求]
时间复杂度为O(n),空间复杂度为O(1)
0 8 [33, 6, -1, -1, 1, 2, 3, 5]
0 7 [5, 6, -1, -1, 1, 2, 3, 5]
0 7 [1, 6, -1, -1, 5, 2, 3, 5]
1 7 [1, 6, -1, -1, 5, 2, 3, 5]
1 7 [1, 2, -1, -1, 5, 6, 3, 5]
2 7 [1, 2, -1, -1, 5, 6, 3, 5]
2 6 [1, 2, 3, -1, 5, 6, 3, 5]
3 6 [1, 2, 3, -1, 5, 6, 3, 5]
3 5 [1, 2, 3, 6, 5, 6, 3, 5]
3 4 [1, 2, 3, 5, 5, 6, 3, 5]
def solver(nums)
left = 0
right = len(nums)
while(left < right):
print(left,right,nums)
if nums[left] == left + 1: #[1,2,3,...] 值和位置满足条件
left+=1
elif nums[left] <= left or nums[left] > right or nums[left] == nums[nums[left]-1]: # 重复或者负数、大于right,
right-=1
nums[left] = nums[right]
else:
flag = nums[left] - 1
nums[left], nums[flag] = nums[flag], nums[left]
return left + 1