得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=13&tqId=11173&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

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

一开始应该想到定义一个变量存储当前栈中的最小元素,这样就可以以O(1)的时间复杂度得到当前栈的最小元素,但是当当前最小元素弹出时,获得次小元素比较麻烦
因此,可以引入一个辅助栈,存储这样的数据:其栈顶存储的是当前最小元素,当最小元素弹出时,其栈顶元素弹出,下一个栈顶元素是次小元素
原始栈正常入栈,辅助栈为空时元素入栈,否则,如果原始栈入栈元素比辅助栈栈顶元素小,则入栈
出栈时,如果两个栈栈顶元素相等,则都出栈
因为原始栈中当前栈中最小元素之后入栈的元素都比最小值小,所以在最小元素未弹出之前,辅助栈栈顶始终是当前栈最小元素

全部评论

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
牛客737698141号:他们可以看到在线简历的。。。估计不合适直接就拒了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务