题目描述
思路
class MyQueue {
stack<int> inStack, outStack;
void in2out(){
while(!inStack.empty()){
outStack.push(inStack.top());
inStack.pop();
}
}
public:
MyQueue() {}
void push(int x) {
inStack.push(x);
}
int pop() {
if(outStack.empty()){
in2out();
}
int x = outStack.top();
outStack.pop();
return x;
}
int peek() {
if(outStack.empty()){
in2out();
}
return outStack.top();
}
bool empty() {
return inStack.empty() && outStack.empty();
}
};
复杂度
时间复杂度:push 和 empty 为 O(1),pop 和 peek 为均摊 O(1)。对于每个元素,至多入栈和出栈各两次,故均摊复杂度为 O(1)。
空间复杂度:O(n)。其中 n 是操作总数。对于有 n 次 push 操作的情况,队列中会有 n 个元素,故空间复杂度为 O(n)。