【发布时间】:2018-06-14 13:53:09
【问题描述】:
跟进这个问题:Implement Stack using Two Queues
我希望实现答案的版本 A(高效推送),但我还需要考虑队列大小,即我不能“永远排队”,但在某个点队列将用完空间。
我需要确保所有推送操作都以恒定的时间复杂度完成。
我将如何继续实施?一旦队列满了就复制队列显然会导致 O(n) 的复杂度。
我可以创建一个新的空队列并开始推送到那里,但是它需要代表一个堆栈,并且在弹出操作的某个时间点,它将到达新队列的末尾并且不知道其余的项目在旧队列中。
【问题讨论】:
-
如果您只在队列已满时复制队列,那么复制的成本在所有推送中摊销 非常接近每次推送的 O(1)。
-
为什么在空间不足时可以向现有队列添加队列但不能向现有队列添加值?为什么空间不足不仅仅表明您实现的堆栈空间不足?你有什么限制?