题解 | #包含min函数的栈#

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49

包含min函数的栈:最直观的想法是,使用两个栈,一个是数据栈st,一个是最小值栈minx,push函数的实现则是,直接压入数据到数据栈,如果最小值栈为空或者输入的数据小于等于最小值栈的栈顶则压入数据到最小值栈,注意,等于的也要压入,因为栈中可能包含重复的元素,比如2 3 4 2 5 6,然后三个pop操作,pop函数的实现则是,如果数据栈不为空且最小值栈不为空且数据栈栈顶和最小值栈栈顶元素相等,则从最小值栈弹出元素,否则只要数据栈不为空就弹出数据栈元素,top函数的实现则是,直接返回数据栈栈顶,min函数的实现则是,直接返回最小值栈栈顶。

stack<int> st; //存数据的栈
stack<int> minx; //存最小值的栈
void push(int value) 
{
    //直接压入数据到数据栈
    st.push(value);
    //最小值栈为空或者输入的数据小于最小值栈栈顶则压入数据到最小值栈
    //注意栈可能包含重复元素 所以小于等于的都要压入数据栈!
    if(minx.empty()||value<=minx.top())
       minx.push(value);
}
void pop() 
{
    //数据栈不为空才能弹出
    if(!st.empty())
    {
       //最小值栈不为空且数据栈栈顶等于最小值栈栈顶则弹出最小值栈
       if(!minx.empty()&&st.top()==minx.top())
          minx.pop();
       //只要数据栈不为空就弹出数据栈
       st.pop();
    }
}
int top() 
{
    return st.top();
}
int min() 
{
    return minx.top();
}

#包含min函数的栈#
剑指offer 文章被收录于专栏

剑指offer专栏主要分享剑指offer题解。

全部评论

相关推荐

09-14 17:23
门头沟学院
故事和酒66:所以说副业很重要,程序员干到40岁,再怎么也赚300万了,吃吃利息也够活下去
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务