美文网首页
2020-06-06(实时记录)最小栈

2020-06-06(实时记录)最小栈

作者: 唐moumou | 来源:发表于2020-06-06 23:17 被阅读0次

    题目

    设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

    push(x) —— 将元素 x 推入栈中。
    pop() —— 删除栈顶的元素。
    top() —— 获取栈顶元素。
    getMin() —— 检索栈中的最小元素。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/min-stack

    思路

    从目的出发,是为了获得栈中最小的元素,所以需要一个辅助结构来记录这个最小的值。于是就可以考虑用两个栈,一个专门存储数据的栈,一个存储对应数据栈中最小值的栈。
    当MinStack为空时直接将x push 进去
    否则 将x与MinStack栈顶元素作比较,将小的push进栈
    data进行正常的push操作就行了
    所以对于push操作有:

    void push(int x) {
            data.push(x);
            if(MIN.empty())
            {
                MIN.push(x);
            }
            else
            {
                if(x<MIN.top())
                {
                    MIN.push(x);
                }
                else
                {
                    MIN.push(MIN.top());
                }
                
            }
        }
    

    将数据pop出去时,就将对应MinStack栈顶元素push出去即可
    所以对于pop操作有:

    void pop() {
            data.pop();
            MIN.pop();
        }
    

    其他操作如下:

    int top() {
            return data.top();
        }
    
        int getMin() {
            return MIN.top();
        }
    

    相关文章

      网友评论

          本文标题:2020-06-06(实时记录)最小栈

          本文链接:https://www.haomeiwen.com/subject/rsgftktx.html