2336. 无限集中的最小数字
分析
- 使用有序集合
std::set
来维护集合s
,其特性是自动按升序排列元素:popSmallest()
可以通过获取集合中的第一个元素*s.begin()
来实现最小值的提取,时间复杂度为O(log n)
addBack(num)
通过插入操作,将数字加入集合,同时自动维护顺序,时间复杂度为O(log n)
- 由于题目给出
1 <= num <= 1000
,因此初始化集合时,可以预先将s
初始化为1 ~ 1000
时间复杂度
popSmallest()
:- 获取最小值
*s.begin()
:O(1)
- 删除操作
s.erase()
:O(\log n)
- 总时间复杂度:
O(logn)
- 获取最小值
addBack(num)
:- 插入操作
s.insert()
:O(logn)
- 插入操作
- 初始化操作:
插入
n
个初始值:总复杂度为O(nlogn)
空间复杂度
主要存储集合 s,大小为集合中的元素个数,空间复杂度为 O(n)
C++代码
|
|