leetcode232
解法:
class MyQueue {
public:
stack<int> scin;
stack<int> scout;
MyQueue() {
}
void push(int x) {
scin.push(x);
}
int pop() {
if(scout.empty())
{
while(!scin.empty())
{
scout.push(scin.top());
scin.pop();
}
}
int top = scout.top();
scout.pop();
return top;
}
int peek() {
if(scout.empty())
{
while(!scin.empty())
{
scout.push(scin.top());
scin.pop();
}
}
return scout.top();
}
bool empty() {
if(scout.empty()&&scin.empty())
return true;
else
return false;
}
};
答案:(存在一个复用)
/** Get the front element. */
int peek() {
int res = this->pop(); // 直接使用已有的pop函数
stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
return res;
}
leetcode225:
两个队列实现:
class MyStack {
public:
queue<int> scin;
queue<int> scout;
MyStack() {
}
void push(int x) {
scin.push(x);
}
int pop() {
while(!scout.empty())
{
scout.pop();
}
int size = scin.size();
size--;
while(size--)
{
scout.push(scin.front());
scin.pop();
}
int out = scin.front();
scin.pop();
while(!scout.empty())
{
scin.push(scout.front());
scout.pop();
}
return out;
}
int top() {
return scin.back();
}
bool empty() {
if(scin.empty())
return true;
else
return false;
}
};
一个队列实现:
class MyStack {
public:
queue<int> scin;
MyStack() {
}
void push(int x) {
scin.push(x);
}
int pop() {
int size = scin.size();
size--;
while(size--)
{
scin.push(scin.front());
scin.pop();
}
int out = scin.front();
scin.pop();
return out;
}
int top() {
return scin.back();
}
bool empty() {
if(scin.empty())
return true;
else
return false;
}
};
感悟:
要好好学习一下栈和队列的定义,掌握并使用