题目概述
算法性能
我的思路
这题和232. Implement Queue using Stacks非常像,所以我一开始想着能否用232的思路去解决它:尝试搞俩队列,让队列中元素的出队顺序和栈的元素出栈顺序一致。这是比较容易实现的,只要每次push第i个元素的时候,我们总让现有的所有元素都在某个队列中(记做),另一个队列()为空,这时我们把存入,再让中的元素全部pop出来进入,这样就实现了新加入元素位于一个队列的顶部,从而让队列元素出队顺序与栈中元素出栈顺序一致。当然,这个做法同样可以用一个队列实现,不过此时我们需要维护一个计数器,来统计当前队列中元素的个数。
附上代码:
class MyStack {
private:
queue<int> q;
int sizes;
public:
/** Push element x onto stack. */
void push(int x) {
q.push(x);
int temp;
for(int qi = 0; qi < sizes; ++qi)
{
q.push(q.front());
q.pop();
}
sizes++;
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int res = q.front();
q.pop();
sizes--;
return res;
}
/** Get the top element. */
int top() {
return q.front();
}
/** Returns whether the stack is empty. */
bool empty() {
if (q.empty())
return true;
return false;
}
};