python-leetcode-缺失的第一个正数
41. 缺失的第一个正数 - 力扣(LeetCode)
class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n = len(nums)
# 1. 原地哈希:把 nums[i] 放到 nums[i] - 1 的位置
for i in range(n):
while 1 <= nums[i] <= n and nums[i] != nums[nums[i] - 1]:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1] # 交换到正确位置
# 2. 找到第一个 nums[i] != i + 1 的位置
for i in range(n):
if nums[i] != i + 1:
return i + 1
# 3. 若数组完整,返回 n + 1
return n + 1