包含min函数的栈

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
 
思路:
   第一眼看到这个题目,真是一脸懵逼,无从下手
   题目的目的很明确要实现输出栈中的最小元素的函数,使用栈的数据结构,所以需要定义stack类型的变量,需要实现push函数,pop函数,top函数等
  
  设立两个StackDate和StackMin,一个就是普通的栈,另外一个存储push进来的最小值。(stackMin的作用相当于是用于检索stackData中最小元素位置,)
  push压栈:
  每次压入的数据newNum都push进StackDate中,然后判断StackMin是否为空,如果为空那也把newNum同步压入StackMin里;如果不为空,就先比newNum和StackMin中栈顶元素的大小,如果newNum较大,那就不压入StackMin里,否则就同步压入StackMin里。

  Pop出栈:

    和push操作相对应,判断stackData栈顶元素是否与stackMin栈顶元素相同(stackMin中元素 <= stackData元素),如果相等,两个栈都弹出栈顶元素,不过不相等就stackData弹出

  代码如下:

class Solution {
public:
    stack<int> stack,stack_min;
    
    void push(int value) {
        stack.push(value);
        if(stack_min.empty())
            stack_min.push(value);
        else if(value < stack_min.top())
            stack_min.push(value);
    }
    void pop() {
        if(stack.top() == stack_min.top())
            stack_min.pop();
        stack.pop();
    }
    int top() {
        return stack.top();
    }
    int min() {
        return stack_min.top();
    }
};

附上堆栈stack的基本操作:

原文地址:https://www.cnblogs.com/whiteBear/p/12535360.html