zoukankan      html  css  js  c++  java
  • 【剑指Offer-举例让抽象问题形象化】面试题30:包含min函数的栈

    题目描述

    定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
    注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。

    思路

    一个比较自然的思路就是定义一个变量保存最小元素,当调用min()的时候返回该元素即可。但是该思路有一个问题,就是将当前最小元素返回后,下一个最小元素就不知道了。我们可以用一个辅助栈来保存入栈过程中的最小元素:

    总结如下:
    1、当入栈的时候,将入栈元素和辅助栈的栈顶元素相比较(辅助栈不为空的情况下),如果入栈元素较小,则将入栈元素压入数据栈和辅助栈;如果入栈元素较大,则只压入数据栈;如果辅助栈为空,则将数据压入数据栈和辅助栈;
    2、当出栈的时候,将数据栈和辅助栈栈顶元素弹出;
    3、当获取最小元素时,将辅助栈栈顶元素返回。
    代码如下:

    class Solution {
    public:
        stack<int> s;    //数据栈
        stack<int> s_min;    //辅助栈
        void push(int value) {
            s.push(value);
            if(s_min.empty() || value<s_min.top()) // s_min.empty()要在前面
                s_min.push(value);
            else s_min.push(s_min.top());
        }
        void pop() {
            s.pop();
            s_min.pop();
        }
        int top() {
            return s.top();
        }
        int min() {
            return s_min.top();
        }
    };
    
  • 相关阅读:
    python入学代码
    python安装和pycharm安装与笔记
    python预习day1
    python-tyoira基本
    Typora基础
    学习一下saltstack 服务器批量管理
    消息队列与kafka
    消息队列rabbitmq
    redis数据库在linux上的学习
    蓝绿部署、滚动发布、灰度发布的介绍以及最佳实践
  • 原文地址:https://www.cnblogs.com/flix/p/12466069.html
Copyright © 2011-2022 走看看