【发布时间】:2015-04-03 04:34:18
【问题描述】:
列表的属性:
大小必须为 N,其中 N 是整数的数量
没有空单元格
数字可能不是完全连续的(即 {-23,-15,-3,1,2,6,7,8,15,100})
插入/查找需要在恒定时间内。
我的第一直觉是使用哈希表,但这会创建未使用的单元格,其中会跳过数字。
如果该列表中存在一个数字,是否可以构造这样的列表以检查恒定时间?
【问题讨论】:
-
你可以使用一个元素向量,比如
V[i+k] = j,比如L[j]=i,其中k是一些起始偏移量,V和L分别是你的向量和列表?这似乎是作弊,因为它基本上绕过了技术性要求 2。 -
您需要保留订单吗?如果您不需要订单,
Set会起作用。即使那样,您也可以使用类似于 Java 的LinkedHashSet -
Codie:矢量的想法听起来很合理,需要进一步调查。 Mateusz:我忘了说插入和查找需要在恒定时间内进行,但是 log n 插入还不错,这可能是我目前最好的选择。
-
@OneEyed well
LinkedHashSet应该提供恒定的时间插入、查找和删除。不确定您是否在寻找特定于平台的解决方案,但您可以检查该平台是否具有等效的数据结构,或者只是检查 Java 的源代码并自己实现它 -
“不浪费空间”是一个非常不适定的约束。此外,我们应该如何为 size 字段留出空间?将空数据结构的大小降至 0 几乎是不可能的。
标签: algorithm list constant-time