题目:
实现思路:
一个栈作为中间栈,另一个栈作为主栈。
class CQueue {
public:
stack<int>a,b;
CQueue() {
}
void appendTail(int value) {
a.push(value);
}
int deleteHead() {
if(!a.empty()){
while(!a.empty()){
b.push(a.top());
a.pop();
}
int c=b.top();
b.pop();
while(!b.empty()){
a.push(b.top());
b.pop();
}
return c;
}
return -1;
}
};
结果:
可见,效率太低!
看了评论区老哥们的思路,有一个优化思路吸引了我的注意:
in栈只负责进,out栈只负责出;
当out栈为空时:
in栈也为空时,输出-1;
int栈不为空时,in栈全导入out栈;
out栈不为空时,弹出out栈顶部元素。
class CQueue {
public:
stack<int>in,out;
CQueue() {
}
void appendTail(int value) {
in.push(value);
}
int deleteHead() {
if(out.empty()){
if(in.empty()){
return -1;
}
while(!in.empty()){
out.push(in.top());
in.pop();
}
}
int t=out.top();
out.pop();
return t;
}
};
结果:
思路比较:
取平均值,后3次是优化后的实现效果:
结论:
优化后的思路确实提升了效率。