给定一个含个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3}中未出现的最小正整数是4.
时间: 2024-10-06 08:04:48 浏览: 29
算法设计与分析期末之动态规划第一题Largest-divisible-subset.zip
为了找到数组中未出现的最小正整数,我们可以使用一个哈希集合(Set)来存储已经出现过的元素,同时遍历整个数组。对于每个元素,检查它是否已经在哈希集合中,如果没有,则添加到结果并更新当前未出现的最小正整数。这个算法的时间复杂度是O(n),其中n是数组的长度,因为它只遍历一次数组。
下面是Python的实现代码:
```python
def firstMissingPositive(nums):
# 初始化一个空集合来存放出现过的数字
num_set = set()
# 遍历数组,同时更新最小缺失正整数
for num in nums:
if 1 <= num <= len(nums):
if num not in num_set:
num_set.add(num)
else:
# 如果num已经存在于set中,表示有重复,需要跳过它
num += 1
# 返回第一个不在set中的正整数,即最小缺失的正整数
for i in range(1, len(nums) + 1):
if i not in num_set:
return i
# 示例
nums = [-5, 3, 2, 3]
result = firstMissingPositive(nums)
print(f"数组 {nums} 中未出现的最小正整数是: {result}")
nums = [1, 2, 3]
result = firstMissingPositive(nums)
print(f"数组 {nums} 中未出现的最小正整数是: {result}")
```
阅读全文