文章
200
粉丝
0
获赞
2
访问
93.6k
过滤与记录: 遍历一次数组,将所有大于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) { // 只关心正整数
...
登录后发布评论
暂无评论,来抢沙发