【发布时间】:2015-09-22 23:47:31
【问题描述】:
我正在解决一个问题,我意识到我需要一个具有以下属性的数据结构,但即使经过几个小时的谷歌搜索也找不到。我相信 STL 库太丰富了,没有这个所以在这里问。
- 在
O(log(n))时间插入任何元素(应该能够包含重复的元素) - 在
O(log(n))时间内删除一个元素。 - 如果我想查询 [a,b] 范围内元素的数量,我
应该在
O(log(n))time..
如果我要从头开始编写它,对于第 1 部分和第 2 部分,我将使用 set 或 multiset 并修改他们的 find() 方法(在 O(log(N)) 时间运行)以返回索引而不是迭代器,这样我就可以做到
abs(find(a)-find(b)) 所以我得到了 log(N) 时间内的元素计数。但对我来说不幸的是,find() 返回和迭代器。
我已经查看了multiset(),但我无法在O(log(n)) 时间内完成要求 3。它需要O(n)。
有什么提示可以轻松完成吗?
【问题讨论】:
-
请不要在没有 cmets 的情况下投反对票!!
-
我没有值得信赖的指导书,但如果你能拿到“Skiena, Steven S”的“算法设计手册”,那就去吧。是我的算法来源。
-
我很确定哈希表应该有 log(n) 时间,但我不确定
-
@RNar,哈希表的插入和删除为 O(1),但在给定范围内查找元素的数量是 O(n)。除了重复值也是一个问题
-
@upr 如果我想到了这些:Similar question、Sumary、STL 我已将它们添加为书签。