面试题30:包含min函数的栈

一、题目

     定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

二、解法

思路:利用一个辅助栈来存放最小值
        栈  3,4,2,1
        辅助栈 3,3,2,1
    每入栈一次,就与辅助栈顶比较大小,如果小就入栈,如果大就入栈当前的辅助栈顶;当出栈时,辅助栈也要出栈
这种做法可以保证辅助栈顶一定都当前栈的最小值
表:栈内压入3,4,2,1之后两次弹出栈顶数字再压入0时,数据栈、辅助栈和最小值的状态
步骤 操作 数据栈 辅助栈 最小值
1 压入3 3 3 3
2 压入4 3,4 3,3 3
3 压入2 3,4,2 3,3,2 2
4 压入1 3,4,2,1 3,3,2,1 1
5 弹出 3,4,2 3,3,2 2
6 弹出 3,4 3,3 3
7 压入0 3,4,0 3,3,0 0
class Solution {
public:
    stack<int> stack1, stack2;
    
    void push(int value) {
        stack1.push(value);
        if (stack2.empty())
            stack2.push(value);
        else
        {
            if (value<stack2.top())
                stack2.push(value);
            else
                stack2.push(stack2.top());
        }
    }
    void pop() {
        stack1.pop();
        stack2.pop();
    }
    int top() {
        return stack1.top();
    }
    int min() {
        return stack2.top();
    }
};


猜你喜欢

转载自blog.csdn.net/sinat_36161667/article/details/80825685
今日推荐