【剑指Offer】【栈】包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

A:因为包含了入栈和出栈的操作,存储最小数的变量不能单单只是一个int的变量,应该用一个辅助栈来存储

  所以创建数据站存储入栈的数据,创建最小数栈存储最小数

  入栈:数据栈入栈,若最小栈为空 || value小于最小栈的顶元素,则把value入栈,否则再入一次栈顶元素

  出栈:如果栈有元素,则出栈

  取栈顶:返回数据栈栈顶

  取最小值:返回最小值栈栈顶  

class Solution {

public:
    void push(int value) 
    {
        s_data.push(value);
        if((s_min.empty() == true) || (value < s_min.top()))
        {
            s_min.push(value);
        }
        else
        {
            s_min.push(s_min.top());
        }
    }
    void pop() 
    {
        if(s_data.top() > 0 && s_min.top() > 0)
        {
            s_min.pop();
            s_data.pop();
        }
    }
    int top() 
    {
        return s_data.top();
    }
    int min() 
    {
        return s_min.top();
    }
private:
    stack<int> s_data;
    stack<int> s_min;
};

  

相关题目:

  最小栈:实现一个最小栈,有三种操作,min:得到栈中的最小值,push:在栈顶插入一个元素,pop:弹出栈顶元素,使这三种操作的时间复杂度都是O(1)

  获取n维数组的最大深度:输入参数为字符串型的n维数组,数组的每一项值为数组 或 int型数字。请实现一个函数,可以获取列表嵌套列表的最大深度为多少。

  中缀表达式转后缀表达式:将中缀表达式转为后缀表达式,输入 a+b*c/d-a+f/b 输出 abc*d/+a-fb/+

猜你喜欢

转载自www.cnblogs.com/xiexinbei0318/p/11432619.html