剑指offer 21.包含min函数的栈

  1. 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
  2. 思路:
    1. 栈的每一个单元由两个值组成(value, 从栈底到当前位置的min_value)
    2. pop的时候没有关系,因为直接弹出就可以
    3. push的时候需要维护栈内的最小值,所以要用当前新进去的value和当前栈里的minvalue取最小,那push进去之后仍旧维护了当前栈内的最小值
  3. 启发或者坑:
    1. pop没有返回值,top和getmin有返回值
  4. 代码
    class Solution {
        stack<int> values;
        stack<int> minValues;
    public:
        void push(int value) {
            values.push(value);
            if (minValues.empty())
                minValues.push(value);
            int top = minValues.top();
            if (value < top)
               minValues.push(value);
            else
               minValues.push(top);
        }
        void pop() {
            values.pop();
            minValues.pop();
        }
        int top() {
            return values.top();
        }
        int min() {
            return minValues.top();
        }
    };
发布了131 篇原创文章 · 获赞 5 · 访问量 7408

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/103842910