c++解法:
我们先看一下题目的要求:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
我们先想一想怎么样解决这个问题,
其实有人家提供的接口,就可以看到这道题其实很简单,不是很难,也没有什么分析的,就是在实现的时候要小心,下面我把代码先写在下面,我们先看一看:
class MinStack {
public:
/** initialize your data structure here. */
//这里是不是奇怪,怎么不一样,其实在哪里,我已经把那个接口删了,它会自动调用系统给提供的,
//不用我们自己实现
void push(int x) {
_st.push(x);
if(_minst.empty() || x <= _minst.top()) //这里有可能里面没有一个节点,所以要判断一下,为空直接添加
{
_minst.push(x); //如果是小于,那么就要插入进去;
}
}
void pop() {
if(_st.top() == _minst.top()) //先判断两个是否相等;
{
_minst.pop(); //相等,就将_minst,删除;
}
_st.pop(); //_st它是每一次都要删;
}
int top() {
return _st.top();
}
int getMin() {
return _minst.top();
}
stack _st;
stack _minst;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/