为什么不能nums这样赋值呢?
nums[nums[i]] = nums[i]呢
例如 如果数组中存在3 那么我们可不可以nums[3] = 3呢?
这样最后的结果会不会和 [0, 1, 2, 3, 4, 5]吗?
然后对这个数组从1开始遍历不就好了吗
这样做事不行的,因为[1,2,3,0]这样最后的结果就是[1, 1, 0, 3]。
因为值1 会对数组中索引为1的值进行修改,然后数组中索引为1的原来的值就会没了。
而加n,然后对这个索引出的值求对n的余数, 就还是原来的数了。
所以这样是不行的。
class Solution:
def firstMissingPositive(self, nums):
nums.append(0)
n = len(nums)
for i in range(n):
if nums[i] < 0 or nums[i] >= n:
nums[i] = 0
for i in range(n):
nums[nums[i] % n] += n
for i in range(1, n):
if nums[i] < n:
return i
return n

探讨了在数组中寻找缺失正整数的算法。直接使用数组元素作为索引会导致错误,因相同值会覆盖原有信息。通过加数组长度再取模的方法,既保留原始信息又标记每个位置的状态,从而准确找到最小缺失正整数。
949

被折叠的 条评论
为什么被折叠?



