LeedCode 155 最小栈 c++ 《分析和完整的解题步骤》

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();
 */

你可能感兴趣的:(LeetCode试题)