• 剑指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  */
  • 相关阅读:
    excel2007灵活计算2个日期之间的工作日
    bat
    eclipse Maven操作出现No compiler is provided in this environment.Perhaps you are running on a JRE rather than a JDK?
    将BeyondCompare设置为TortoiseSVN的扩展比较工具
    python_Excel_xlwt
    Pyqt5_实例1
    Word使用技巧——持续更新
    python_serial
    Pyqt5_Python运用过程中一些问题和技巧
    Pyqt5_QfileDialog
  • 原文地址:https://www.cnblogs.com/rookiez/p/13233837.html
Copyright © 2020-2023  润新知