📅  最后修改于: 2023-12-03 15:10:45.761000             🧑  作者: Mango
在本套装中,我们将介绍如何查找未排序数组中缺少的最小正数。这个问题可以通过多种方法解决,我们将会探讨其中的三个。
我们可以先对数组进行排序,然后从小到大扫描整个数组,找到第一个不在数组中的正整数。时间复杂度为O(nlogn)。
def find_missing_number(nums):
nums.sort()
missing_number = 1
for num in nums:
if num == missing_number:
missing_number += 1
elif num > missing_number:
break
return missing_number
我们可以使用哈希表来记录数组中的每个数出现的次数,然后从小到大扫描整个正整数序列,找到第一个不在哈希表中的正整数。时间复杂度为O(n)。
def find_missing_number(nums):
nums_dict = {}
for num in nums:
if num > 0:
nums_dict[num] = nums_dict.get(num, 0) + 1
missing_number = 1
while missing_number in nums_dict:
missing_number += 1
return missing_number
我们可以对于每个出现在数组中的正整数nums[i],将它交换到nums[nums[i]-1]位置上。然后再从前往后扫描整个数组,找到第一个不在正确位置上的数,它就是最小的缺失正整数。时间复杂度为O(n)。
def find_missing_number(nums):
n = len(nums)
for i in range(n):
while 1 <= nums[i] <= n and nums[nums[i]-1] != nums[i]:
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
以上是本套装介绍的三种方法,根据不同的情况选择不同的方法来解决该问题。