📅  最后修改于: 2023-12-03 15:07:16.622000             🧑  作者: Mango
给定一个整数数组,找到每个数组索引的最小缺失非负整数。
例如,对于数组 [3, 5, -1, 1]
,索引 0
的最小缺失非负整数是 0
,索引 1
的最小缺失非负整数是 4
,索引 2
的最小缺失非负整数是 0
,索引 3
的最小缺失非负整数是 2
。
遍历数组,将所有负数和零全部改为 len(nums)
,将大于等于数组长度的数改为 0
。
for i in range(len(nums)):
if nums[i] <= 0:
nums[i] = len(nums)
elif nums[i] >= len(nums):
nums[i] = 0
遍历数组,使用当前数字作为索引,将对应索引位置的数字取相反数。如果已经是负数,则不重复修改。
for i in range(len(nums)):
index = abs(nums[i])
if index != len(nums):
nums[index] = -abs(nums[index])
再次遍历数组,找到第一个正数的索引即可,该索引为最小缺失非负整数。如果数组中所有数字均为负数,则返回数组长度。
for i in range(1, len(nums)):
if nums[i] > 0:
return i
if nums[0] > 0:
return 1
else:
return len(nums)
def find_min_missing(nums):
for i in range(len(nums)):
if nums[i] <= 0:
nums[i] = len(nums)
elif nums[i] >= len(nums):
nums[i] = 0
for i in range(len(nums)):
index = abs(nums[i])
if index != len(nums):
nums[index] = -abs(nums[index])
for i in range(1, len(nums)):
if nums[i] > 0:
return i
if nums[0] > 0:
return 1
else:
return len(nums)
assert find_min_missing([3, 5, -1, 1]) == 0
assert find_min_missing([1, 2, 0]) == 3
assert find_min_missing([7, 8, 9, 11, 12]) == 1