zoukankan      html  css  js  c++  java
  • 包含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 };

    过程可以画图理解。

  • 相关阅读:
    fabu dao fenleizhong
    net core 发布到服务器的方式
    暗示net core
    new post
    gg
    asb
    Nodejs 8.0 踩坑经验汇总
    禁止未发布的博文上首页等
    SortedList
    JSON.stringify 语法实例讲解
  • 原文地址:https://www.cnblogs.com/love-yh/p/7372440.html
Copyright © 2011-2022 走看看