LeetCode155. 最小栈(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.

题目思路;可以另外建一个栈,存储实际要用的栈上对应位置上的最小值。

LeetCode155. 最小栈(C++)_第1张图片

下面是我的代码

class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        a.push(x);
        if (!minA.empty()){ //如果最小值栈不为空
           if (x>minA.top()){ //判断新加入的元素大小是否更小
               minA.push(minA.top());//没有比上一个最小值更小,所以继续压上一个最小值
           }else{
               minA.push(x); //更小时,当前的对应位要压更小的那个值。
           }
        }else{
            minA.push(x); //当之前储存最小值栈没有值时,直接压入。
        }
        
        
    }
    
    void pop() {
        a.pop();
        minA.pop();
        
    }
    
    int top() {
        return a.top();
        
    }
    
    int getMin() {
        return minA.top();
        
    }
   private:
    stack   a;
    stack   minA;
    };

/**
 * 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刷题之栈和队列)