【发布时间】:2021-04-03 11:53:34
【问题描述】:
我解决了问题的第一部分,但卡在了第二部分。
我有一部电梯,想支持以下内容:
Init()设置电梯从0层开始,运行方向为向上(该函数只调用一次,方向不能改变)。 O(1)
AddStop(K)在DS中保存电梯到达k层时应该停止。 O(log n) 而 n 是电梯的总停靠次数。
NextStop() 将电梯发送到下一个停止位置,如果它在最终可用的停止位置,则电梯将停留在当前位置。 O(1)。
我的解决方案:我使用 AVL 树,这样每个节点都有一个指针,指向恰好位于它之后的节点和它之前的节点(根据楼层号)
当我添加新楼层时,我相应地更改了它的 2 个指针,并将指针更改为树中受影响的节点。
第 2 部分:
已知在我调用AddStop(K)之后,电梯可以停在的最高楼层最大为2i。
新的复杂性时间要求:
Init() - O(1)。 (没变)
AddStop(K) - O(1)。用NextStop()摊销
NextStop() - O(1)。用AddStop(K)摊销
有人可以帮我解决第 2 部分吗?
更新:
我认为第 1 部分与解决第 2 部分无关,而且我非常相信我们应该在这里使用哈希表。
【问题讨论】:
标签: algorithm data-structures time-complexity hashtable amortized-analysis