zoukankan      html  css  js  c++  java
  • LeetCode:面试题 03.02. 栈的最小值

    题目链接:https://leetcode-cn.com/problems/min-stack-lcci/

    解题思路:

    1. 通过新建两个栈,一个是数据栈,另一个是临时栈用于存放栈的最小元素;

    2. 这里入栈应该将x直接入stk栈;

    3. 临时栈判断是否为空,若空则直接入栈,否则将临时栈的栈顶与当前入栈元素x对比,x小于栈顶元素,则入栈;x大与栈顶元素则将较小的栈顶元素入栈;

    4. 弹出时,将两个栈都pop;

    5. 返回栈的最小元素时,由于临时栈从栈底到栈顶,是按照降序排列,返回栈顶元素即为最小值。

    另外一种方法:

    主要区别是在入栈时,小于临时栈顶元素,则不入栈,这时两个栈的元素数量不一致。

    在弹出元素时,通过判断数据栈的栈顶元素是否与临时栈相同,相同则弹出临时栈的栈顶元素,否则不变;

    方案一和方案二其实都是用stackMin栈保存着stackData 每一步的最小值。共同点是
    所有操作的时间复杂度都为0(1)、空间复杂度都为0(n)。

    区别是:

    方案一中stackMin压入时稍省空间,但是弹出操作稍费时间;

    方案二中stackMin压入时稍费空间,但是弹出操作稍省时间。

     1 class MinStack {
     2 public:
     3     /** initialize your data structure here. */
     4     MinStack() 
     5     {}
     6     std::stack<int> stk; //局部变量return之后 变量失效;
     7     std::stack<int> tmp; 
     8     
     9     void push(int x) 
    10     {
    11         if (tmp.empty())
    12         {
    13             tmp.push(x);
    14         }
    15         else if (tmp.top() > x)
    16         {
    17             tmp.push(x);
    18         }
    19         else 
    20         {
    21             tmp.push(tmp.top());
    22         }
    23         stk.push(x);
    24     }
    25     
    26     void pop() 
    27     {
    28         stk.pop();
    29         tmp.pop();
    30     }
    31     
    32     int top() 
    33     {
    34         int i=stk.top();
    35         return i;
    36     }
    37     
    38     int getMin() 
    39     {
    40         return tmp.top();
    41     }
    42 };
    43 
    44 /**
    45  * Your MinStack object will be instantiated and called as such:
    46  * MinStack* obj = new MinStack();
    47  * obj->push(x);
    48  * obj->pop();
    49  * int param_3 = obj->top();
    50  * int param_4 = obj->getMin();
    51  */
  • 相关阅读:
    Sysinternals Suite
    扩展Visual Studio Test Project:自定义TestClassAttribute
    扩展Visual Studio Test Project:自定义TestClassAttribute
    SQL Server Single-user Mode
    MAXDOP(max degree of parallelism)
    关于log4net
    Go 切片的一种有趣内存泄漏方式
    Go 中的内联优化
    优化 Golang 服务来减少 40% 以上的 CPU
    Go 编译器内部知识:向 Go 添加新语句-第 2 部分
  • 原文地址:https://www.cnblogs.com/Tavi/p/12504731.html
Copyright © 2011-2022 走看看