【发布时间】:2015-01-06 21:37:50
【问题描述】:
我必须插入 K 个数字,范围从 0 到 10^9。后来我想知道我是否插入了一个特定的数字。这里K的范围是0到10^5。
插入和删除都必须在恒定时间内。我看过 C++ STL unordered_map。但是unordered_map 需要两个参数。我只想插入一个数字而不是key-value pair。
我可以简单地使用一个布尔数组,比如
bool numberExists[1000000000];
但将其初始化为 false 将花费大量时间。 据说我想要恒定的时间插入和查找。
我应该使用什么数据结构...?
【问题讨论】:
-
你为什么不用
std::vector -
@Shan 我相信向量只支持恒定时间插入而不是查找....
-
@PRP 它是按索引进行的恒定时间查找。由于您的键将是索引,因此这是恒定时间查找。虽然内存相当大。
-
谁说我的钥匙就是我的索引......?
-
嗯,你做到了?插入数字 999:
vals[999] = true;。检查您是否插入了号码 999:if(vals[999]) ...。但同样,从记忆的角度来看,对于您的大数字来说可能并不理想。
标签: c++ algorithm data-structures