【发布时间】:2018-11-13 05:58:46
【问题描述】:
如何在 JavaScript 中创建一个队列,以便在接近 O(1)/恒定时间内添加/删除元素?现在我有一个简单的数组作为队列,但是要找到要删除的元素,我必须遍历数组,然后调用Array.prototype.splice。
不仅如此,如果你有一个基于简单数组的 FIFO 队列,你将需要调用 Array.prototype.shift 或 Array.prototype.unshift,这两个都是 O(N),因为它们必须更新索引数组中的每一项。
因此,我希望在列表/队列中的任何位置以恒定时间插入/删除元素。如果您尝试将其放入 FIFO 队列,则普通数组似乎不会产生这种情况。
【问题讨论】:
-
pop()或shift()是逆运算符。您应该只需要拼接来从数组的“中间”移除。其他人在末端工作 -
是的,但我需要从数组的中间移除,这就是问题所在。
-
我只需要在末端插入,但我需要从中间删除。
-
您可以改用
Set,它在现代引擎 IIRC 中具有 O(1) 的插入/查找/删除复杂性 -
Set 是个好主意,但是如何存储队列的顺序,换句话说,如何在 Set 上实现 pop() /push()/shift()/unshift() .
标签: javascript node.js hash hashmap queue