LC 速查

HOT 100索引 › B5 普通数组 Array

LC 41缺失的第一个正数First Missing Positive 困难

找出数组中未出现的最小正整数,要求 O(n) 时间、常数空间。

思路 原地哈希:把值 x 交换到下标 x-1 处,再扫第一个 nums[i] != i+1 的位置。时间 O(n)、空间 O(1)。

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        n = len(nums)
        for i in range(n):
            x = nums[i]
            while 1 <= x <= n and nums[x - 1] != x:
                nums[i], nums[x - 1] = nums[x - 1], x
                x = nums[i]
        for i in range(n):
            if nums[i] != i + 1:
                return i + 1
        return n + 1
← 上一题 除了自身以外数组的乘积矩阵置零 下一题 →