232
思路
将一个栈当作输入栈,
另一个栈当作输出栈,
每次 pop 或 peek 时,
若输出栈为空,
则将输入栈的全部数据依次弹出并压入输出栈。
时间复杂度:O(1)
空间复杂度:O(n)
代码
class MyQueue {
public:
MyQueue() {
}
void push(int x) {
stackin.push(x);
}
int pop() {
if(stackout.empty()){
while(!stackin.empty()){
stackout.push(stackin.top());
stackin.pop();
}
}
int temp = stackout.top();
stackout.pop();
return temp;
}
int peek() {
if(stackout.empty()){
while(!stackin.empty()){
stackout.push(stackin.top());
stackin.pop();
}
}
return stackout.top();
}
bool empty() {
if(stackout.empty() && stackin.empty()){
return true;
}
else{
return false;
}
}
private:
stack<int> stackin;
stack<int> stackout;
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
225
思路
先将元素入队到 queue2,
然后将 queue1的元素依次出队并入队到 queue2,
再将 queue1和 queue2互换。
时间复杂度:O(n)
空间复杂度:O(n)
代码
class MyStack {
public:
queue<int> queue1;
queue<int> queue2;
MyStack() {
}
void push(int x) {
queue2.push(x);
while(!queue1.empty()){
queue2.push(queue1.front());
queue1.pop();
}
swap(queue1, queue2);
}
int pop() {
int temp = queue1.front();
queue1.pop();
return temp;
}
int top() {
return queue1.front();
}
bool empty() {
return queue1.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/