文章
117
粉丝
0
获赞
0
访问
5.5k
过滤与记录: 遍历一次数组,将所有大于0的数记录下来。由于我们只关心正整数,负数和零无需考虑。为了快速查找,可以使用一个布尔数组或者哈希集合(std::unordered_set
或 std::set
)来存储这些正整数。
n+1
(因为最坏情况下,如果1到n都存在,答案就是n+1
)。例如,我们可以考虑将 n
视为一个上限,如果数组中的最大正整数远超n
,布尔数组会占用过多空间。然而,对于“未出现的最小正整数”这个问题,如果1到k
都存在,而k+1
不存在,那么答案就是k+1
。如果数组大小为n
,那么答案最大是n+1
(当数组包含1到n时)。因此,一个大小为n+1
的布尔数组是可行的,因为它能覆盖到1到n
这个范围。对于大于n
的整数,我们知道它们不会是“未出现的最小正整数”的候选者(因为我们正在找“最小”的)。查找缺失: 从1开始,逐个检查每个正整数 i
是否在记录中。
i
不在记录中,那么 i
就是未出现的最小正整数,返回 i
。i
在记录中,则继续检查 i+1
。(2)
#include <iostream>
#include <vector>
#include <unordered_set>
int findSmallestMissingPositiveInteger(const std::vector<int>& nums) {
// 步骤1:过滤并记录数组中出现过的所有正整数
std::unordered_set<int> seenPositiveNumbers;
for (int num : nums) {
if (num > 0) { // 只关心正整数
...
登录后发布评论
暂无评论,来抢沙发