跳到主要内容

First Missing Positive

描述

Given an unsorted integer array, find the first missing positive integer.

For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.

分析

本质上是桶排序(bucket sort),每当 A[i]!= i+1 的时候,将A[i]A[A[i]-1]交换,直到无法交换为止,终止条件是 A[i]== A[A[i]-1]

代码

# First Missing Positive
# 时间复杂度O(n),空间复杂度O(1)
def firstMissingPositive(nums: list[int]) -> int:
def bucket_sort(A):
n = len(A)
for i in range(n):
while A[i] != i + 1:
if A[i] < 1 or A[i] > n or A[i] == A[A[i] - 1]:
break
# swap
tmp = A[i]
A[i] = A[tmp - 1]
A[tmp - 1] = tmp

bucket_sort(nums)
for i in range(len(nums)):
if nums[i] != (i + 1):
return i + 1
return len(nums) + 1

相关题目