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();
        }
    };
    
  • 相关阅读:
    SQl语句学习笔记(二)
    Adaboost 算法
    降维PCA技术
    scanf 格式化字符串详解
    大小端模式和位域详解(转载)
    推荐系统开源软件列表汇总和点评(转载)
    遗传算法入门(转载)
    大白话解析模拟退火算法(转载)
    机器学习相关——协同过滤(转载)
    python面向对象之单例模式
  • 原文地址:https://www.cnblogs.com/flix/p/12466069.html
Copyright © 2011-2022 走看看