目录

缺失的第一个正数

目录

41. 缺失的第一个正数 - 力扣(LeetCode) 空间复杂度o(n)很好想,但o(1)不好想,还是个408考研真题

注意O(n) == O(2n),即相较于边遍历边判断,还是遍历两次更加方便且不会有太多损失。类似思想:73. 矩阵置零 - 力扣(LeetCode)

class Solution:

    def firstMissingPositive(self, nums: List[int]) -> int:

        # 将原数组当作哈希表使用。

        for i, num in enumerate(nums):

            if num <= 0:  # 先把小于0的先一步处理,以便于使用标记

                nums[i] = len(nums) + 1

        for i, num in enumerate(nums):

            num = abs(num)

            if num >= 1 and num <= len(nums):

                if nums[num-1] > 0: # 不重复添加

                    nums[num-1] = -nums[num-1]

        res = len(nums) + 1

        for i, num in enumerate(nums):

            if num > 0:

                res = i + 1

                break

        return res