zoukankan      html  css  js  c++  java
  • 155. Min Stack

    题目链接:https://leetcode.com/problems/min-stack/

    【思路】

    • 使用两个栈,一个栈 dataStack 用于保存当前栈中的元素,和普通的栈没区别,另一个栈 minStack 用于保存每一步的最小值

    • push(x) :先将当前数据 x 压入 dataStack 栈中,然后再判断是否压入 minStack 栈中

      • 如果 minStack 为空,说明是第一次插入数据,那么 x 也压入 minStack 栈中
      • 如果 minStack 不为空,此时需要比较 x(即刚才压入 dataStack 栈中的数据) 和 minStack 栈栈顶的元素的大小关系
        • 如果 x 更小或者相等,那么将 x 压入 minStack 中
        • 如果 x 更大,那么不需要操作
    • pop() :先弹出 dataStack 中的栈顶元素 value,然后判断 minStack 是否需要弹出栈顶元素

      • 比较此时 minStack 的栈顶元素和 value 的大小,因为 minStack 栈顶的元素始终是 minStack 中的最小值,也是 dataStack 中的最小值,所以 value 只能大于或等于 minStack 的栈顶元素
        • 二者相等,意味着栈顶元素是上一次被压入的最小值,那么需要弹出 minStack 的栈顶元素
        • value 更大,minStack 不弹出栈顶元素
    • top() :返回 dataSatck 的栈顶元素

    • getMin() :弹出 minStack 栈顶元素

    class MinStack {
    public:
        MinStack() {
            
        }
        
        void push(int x) {
            dataStack.push(x);
            if(minStack.empty() || minStack.top() >= x) {
                minStack.push(x);
            }
        }
        
        void pop() {
            if(!minStack.empty() && minStack.top() == dataStack.top()) {
                minStack.pop();
            }
            dataStack.pop();
        }
        
        int top() {
            return dataStack.top();
        }
        
        int getMin() {
            return minStack.top();
        }
    private:
        stack<int> dataStack,minStack;
        
    };
    
  • 相关阅读:
    B端产品经理的价值
    APP场景流程分析
    大众点评
    降低成本
    抽象不变的,可变的
    优惠券统计报表
    JSON WEB TOKEN
    vue开发项目的坑-[Vue warn]: Do not use built-in or reserved HTML elements as component id: MenuItem
    redis分布式锁和消息队列
    thinkphp 面向切面编程-行为拓展
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/12685987.html
Copyright © 2011-2022 走看看