LeetCode 面试题 03.02. 栈的最小值
/* 栈的最小值是通过两个栈实现的,一个栈(stackData)用于存放push进来的数据,另个栈(stackMin)
用来存放当前的最小值,如果stackMin为空或当前push进来的数据小于stackMin的栈顶元素
将push进来的数据放入stackMin中,否则将stackMin的栈顶元素压如栈中
*/
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
int minX = (stackMin.empty() || stackMin.top() >= x) ? x : stackMin.top();
stackMin.push(minX);
stackData.push(x);
}
void pop() {
stackMin.pop();
stackData.pop();
}
int top() {
return stackData.top();
}
int getMin() {
return stackMin.top();
}
private:
stack<int> stackData;
stack<int> stackMin;
};
LeetCode 232. 用栈实现队列
/* 通过两个栈来实现,stackPush栈负责接收push来的数据,stackPop栈负责往外pop数据,
stackPop为空的时候才能从stackPush往里倒入数据,stackPush往stackPop倒入数据必须
一次倒完
*/
class MyQueue {
public:
/** Initialize your data structure here. */
MyQueue() {
}
/** Push element x to the back of queue. */
void push(int x) {
stackPush.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
if (stackPop.empty()) {
pour();
}
int res = stackPop.top();
stackPop.pop();
return res;
}
/** Get the front element. */
int peek() {
if (stackPop.empty()) {
pour();
}
return stackPop.top();
}
/** Returns whether the queue is empty. */
bool empty() {
return stackPush.empty() && stackPop.empty();
}
void pour() {
while (!stackPush.empty()) {
stackPop.push(stackPush.top());
stackPush.pop();
}
}
private:
stack<int> stackPush;
stack<int> stackPop;
};
如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢