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

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

    示例:

    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.min(); --> 返回 -3.
    minStack.pop();
    minStack.top(); --> 返回 0.
    minStack.min(); --> 返回 -2.
     

    提示:

    各函数的调用总次数不超过 20000 次
     

    不能直接用一个int型保存最小值,因为当最小值被弹出后,我们就不能在O(1)内获取新的最小值了。

    使用2个栈,一个记录数据,一个每次都压入当前栈的最小值,等于说记录了栈压入了这些数据时的最小值。

     1 class MinStack {
     2 public:
     3     stack<int> data;
     4     stack<int> mins;
     5     /** initialize your data structure here. */
     6     MinStack() {
     7         cout<<"MinStack is created."<<endl;
     8     }
     9     
    10     void push(int x) {
    11         data.push(x);
    12         if(mins.empty() || x<mins.top())
    13             mins.push(x);
    14         else
    15             mins.push(mins.top());
    16         return ;
    17     }
    18     
    19     void pop() {
    20         data.pop();
    21         mins.pop();
    22         return ;
    23     }
    24     
    25     int top() {
    26         return data.top();
    27     }
    28     
    29     int min() {
    30         return mins.top();
    31     }
    32 };
    33 
    34 /**
    35  * Your MinStack object will be instantiated and called as such:
    36  * MinStack* obj = new MinStack();
    37  * obj->push(x);
    38  * obj->pop();
    39  * int param_3 = obj->top();
    40  * int param_4 = obj->min();
    41  */
  • 相关阅读:
    python+opencv实现图像缩放
    vim 常用指令-持续更新
    python实现简单的SVM
    linux查看当前目录下,各文件夹大小
    python解析json文件信息到csv中
    根据小图文件名在原图画框
    BZOJ1079: [SCOI2008]着色方案 (记忆化搜索)
    BZOJ1044: [HAOI2008]木棍分割 (二分 + DP)
    gym100825G. Tray Bien(轮廓线DP)
    BZOJ1237: [SCOI2008]配对
  • 原文地址:https://www.cnblogs.com/rookiez/p/13233837.html
Copyright © 2011-2022 走看看