• 包含min函数的栈


    题:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

    思路:若是只要返回最小一个元素,只要每次加入时,和栈顶元素对比就行,小于栈顶元素就先删除栈顶元素,然后加入。但若是想所有元素的出栈顺序是从小到大呢?

    这时我们需要一个辅助栈,辅助栈中从大到小(栈底到栈顶)依次存放当前数据栈中的最小值。当有新元素来时,若小于辅助栈中的元素,则加入辅助栈,同时也加入数据栈,若大于辅助栈中的元素,则只加入数据栈,并将辅助栈栈顶元素再次加入辅助栈。出栈时,数据栈和辅助栈同时出栈,要最小值则返回辅助栈栈顶。代码如下:

     1 class Solution {
     2 public:
     3     stack<int> stackData,stackMin;
     4     void push(int value)        //题目给
     5     {
     6          stackData.push(value);
     7          if(stackMin.empty()||value<stackMin.top())
     8             stackMin.push(value);
     9         else
    10             stackMin.push(stackMin.top());   
    11     }
    12     void pop()          //题目给
    13     {
    14         //assert(stackData.size()>0&&stackMin.size()>0);
    15         stackData.pop();
    16         stackMin.pop();    
    17     }
    18     int top()           //题目给
    19     {
    20         return stackData.top();    
    21     }
    22     int min()           //题目给  
    23     {
    24         return stackMin.top();    
    25     }
    26 };

    过程可以画图理解。

  • 相关阅读:
    UI
    最长回文子串
    LRU缓存机制
    环形链表 II
    环形链表
    买卖股票的最佳时机 II
    [CSP-S模拟测试]:连连看(图论+容斥)
    [CSP-S模拟测试]:集合论(模拟)
    [CSP-S模拟测试]:位运算(数学)
    [CERC2016]:凸轮廓线Convex Contour(模拟+数学)
  • 原文地址:https://www.cnblogs.com/love-yh/p/7372440.html
Copyright © 2020-2023  润新知