🗒️2336. 无限集中的最小数字
2025-7-4
| 2025-7-4
0  |  阅读时长 0 分钟
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 时弹出最小值
此外,在插入元素时,我们还需要进行判重处理。

📎 参考

  • 【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)
  • 决策树2558. 从数量最多的堆取走礼物
    Loading...