271最大化未出现自然数问题
题解
题目要求在一个长度为 n
的数组中,找出最大的未出现的自然数。具体来说,找到最小的正整数 m
,使得 m
没有出现在数组中。
解题思路
计数元素频次:
使用
Counter
统计数组中每个元素出现的次数。这样可以快速判断某个数字是否存在于数组中。遍历寻找未出现的自然数:
从
0
开始,依次检查每个数字i
是否存在于数组中(即cnt[i] > 0
)。- 如果存在,则继续检查下一个数。由于操作可以把
i
变成更大的数字,因此可以把多余的i
的个数用变量f
记录下来。 - 如果不存在,那么查看是否还有多余的更小的数字变成当前的数字。如果有则把
f
的计数减去1
,如果没有则返回当前的i
作为结果。
- 如果存在,则继续检查下一个数。由于操作可以把
返回结果:
如果所有
0
到n-1
的数字都存在,则返回n
。
代码
1 |
|
复杂度分析
- 时间复杂度:
O(n)
,其中n
是数组长度,用于统计元素频次和遍历查找。 - 空间复杂度:
O(n)
,用于存储元素频次。
271最大化未出现自然数问题
https://kongshuilinhua.github.io/2024/12/30/271最大化未出现自然数问题/