zoukankan      html  css  js  c++  java
  • 包含min函数的栈

    【问题】定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

    【思路】

    由于这个题目要求在O(1)找到最小值,首先我们先来看下数据在栈中如何储存,假设有一些数据这样依次入栈:6,4,3,5,4,此时最小值为3,但随着push和pop操作,其最小值都会更新,我们使用另外一个栈来储存每个阶段的最小值!怎么储存呢?

    操作栈:6,4,3,5,4
    最小栈:6,4,3,空,空

    当压入一个数时,我们判断这个数是否小于等于栈顶,若是,此时最小值更新,我们将这个数压入到最小栈中!因此最小栈的栈顶储存的是每个操作(push或pop)后的栈的最小值

    当弹出时,检查是否与最小栈栈顶相同,换句话说是否是操作栈的最小值,若是,则最小栈也需要弹出!

     1class Solution {
     2private:
     3    stack<int> sta;
     4    stack<int> minSta;   // 辅助栈
     5public:
     6    void push(int value) {
     7        sta.push(value);
     8        if(minSta.empty()){
     9            minSta.push(value);
    10        }else if(value <= minSta.top()){
    11            minSta.push(value);
    12        }
    13    }
    14    void pop(){
    15        if(sta.top() == minSta.top()){
    16            minSta.pop();   // 但sta弹出时,如果和minSta相同,那么minSta也弹出
    17        }
    18        sta.pop();
    19    }
    20    int top() {
    21        return sta.top();
    22    }
    23    int min() {
    24        return minSta.top();
    25    }
    26};
  • 相关阅读:
    揭开正则表达式的神秘面纱
    海量数据库的查询优化及分页算法方案
    ASP.NET纯数字验证码
    ASP.NET四种页面导航方式之比较与选择
    C#数据结构之队列
    if exists
    使用tfs online做代码片段笔记管理
    强制删除数据库
    C# GetType()
    TreeView
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11332858.html
Copyright © 2011-2022 走看看