type
status
date
slug
summary
tags
category
icon
password
创建时间
Jul 4, 2025 12:33 AM
现有一个包含所有正整数的集合
[1, 2, 3, 4, 5, ...]
。实现
SmallestInfiniteSet
类:SmallestInfiniteSet()
初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
int popSmallest()
移除 并返回该无限集中的最小整数。
void addBack(int num)
如果正整数num
不 存在于无限集中,则将一个num
添加 到该无限集中。
五、堆(优先队列)§5.1 基础
题目有范围限制,直接初始化所有元素
在不提供范围限制的情况下的做法
参考 宫水三叶
没有提供范围限制后,我们无法将所有的元素加入到优先队列中(堆),也就是上面的做法是不可行的。
这时候,我们创建一个变量
idx
,用于表示我们当前已经弹出的元素(左边界)。考虑当调用
addBack
往集合添加数值 x
时x >= idx
:在范围中,添加时无法重复添加
x < idx
:将元素x
放入堆中,并在pop
时弹出最小值
此外,在插入元素时,我们还需要进行判重处理。