中级农民
- 积分
- 107
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-4-14
- 最后登录
- 1970-1-1
|
本帖最后由 daniel2142 于 2020-9-27 15:28 编辑
穷人求加米。。。
没有太get到层主的点,但是受到了启发,queue::push和queue::pop的均摊时间复杂度都为O(1),空间也不会超出元素个数
思路:同样的两个栈,一个pushStack,仅用于queue::push的时候将元素压入栈顶;另一个popStack,仅用于queue::pop,当调用queue::pop时,若popStack为空,则先将pushStack中的元素全部倒入popStack,再将popStack的栈顶出栈;
下面是模拟过程
queue::push 1: pushStack(1) popStack()
queue::push 2: pushStack(1, 2) popStack()
queue::push 3: pushStack(1, 2, 3) popStack()
queue::pop: pushStack() popStack(3, 2, 1) => pushStack() popStack(3, 2)
queue::push 4: pushStack(4) popStack(3, 2)
queue::pop: pushStack(4) popStack(3)
queue::pop: pushStack(4) popStack()
queue::pop: pushStack() popStack(4) => pushStack() popStack()
每个元素只会进出pushStack和popStack各一次,因此时间复杂度如开头所提
|
|