給定一個未排序的整數數組 nums
,找出其中的最小的缺失的正整數。
範例 1
輸入: nums = [1,2,0]
輸出: 3
範例 2
輸入: nums = [3,4,-1,1]
輸出: 2
範例 3
輸入: nums = [7,8,9,11,12]
輸出: 1
基於以上限制,解法核心是將數組作為哈希表來操作,透過將元素放在正確的位置來確定缺失的數字。
將每個數字放到對應的索引位置,例如:
x
,且 1 <= x <= n
(n
是數組長度),我們應該將 x
放在索引 x-1
的位置。最後,掃描數組,第一個數字不符合其索引的,就是缺失的正整數。
nums[i] != i + 1
的位置,返回 i + 1
。n + 1
。class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n = len(nums)
# 將每個數字放到正確的位置
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]
# 找出第一個缺失的正整數
for i in range(n):
if nums[i] != i + 1:
return i + 1
return n + 1
1 <= nums[i] <= n
的數字標記到對應索引。i + 1
。n + 1
。class Solution:
def firstMissingPositive(self, nums: List[int]) -> int:
n = len(nums)
# 將不在範圍內的數字設為 n + 1
for i in range(n):
if nums[i] <= 0 or nums[i] > n:
nums[i] = n + 1
# 標記出現的數字
for i in range(n):
num = abs(nums[i])
if num <= n:
nums[num - 1] = -abs(nums[num - 1])
# 找出第一個缺失的正整數
for i in range(n):
if nums[i] > 0:
return i + 1
return n + 1
兩種解法都滿足題目對時間和空間的要求,可以根據需求選擇適合的實現方式!