我刚接受过软件访谈。其中一个问题是使用三种方法insert,delete和getRandom以高度优化的方式设计任何数据结构。面试官让我想到数据结构的组合来设计一个新的数据结构。插入可以设计无论如何但是随机和删除我需要获得特定元素的位置。他给了我一个思考数据结构的提示,这种数据结构花费的时间最少。
欢迎任何答案或讨论......
答案 0 :(得分:3)
让t
成为要存储在数据结构中的元素的类型。
有一个可扩展的数组elements
包含所有元素,没有特定的顺序。有一个哈希表indices
,可以将t
类型的元素映射到elements
中的位置。
e
表示
e
末尾添加elements
(即push_back),获取其位置i
(e,i)
插入`indices e
表示
i
中找到e
的{{1}}位置,感谢elements
indices
e
覆盖f
elements
:删除映射indices
并插入(f,indices.size())
(f,i)
,而不是peek
)只是在pop
中绘制一个整数i
并返回{{ 1}}。假设散列表非常适合[0,elements.size()[
类型的元素,则所有三个操作都是O(1)。
请注意数据结构中有0或1个元素的情况。
答案 1 :(得分:2)
树可能在这里运作良好。订单log(n)插入和删除,并选择random也可以是log(n):从根节点开始,在每个交叉点随机选择一个子节点(由每个子节点的叶节点总数加权),直到达到叶。
答案 2 :(得分:0)
排序时间最少的数据结构是排序数组。
get_random()是二进制搜索,所以O(log n)。
insert()和delete()涉及添加/删除有问题的元素然后求助,即O(n log n),例如可怕。
我认为他的暗示很差。你可能面试不好。
答案 3 :(得分:0)
我觉得你可以使用一些像红黑树一样的树木。这将给出O(log n)插入和删除时间。 要获取随机元素,可以使用额外的哈希表来跟踪树结构中的元素。
答案 4 :(得分:0)