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


    • 题目描述:

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

    • 分析:

      首先想到的是在栈里添加一个成员变量用来保存最小的元素,每次压入一个新元素进栈时与该变量比较,如果更小则更新最小元素。那么问题来了,如果当前栈中最小元素出栈,我们就无法得到当前栈中的最小元素了。
      所以我们只用一个变量保存最小值是不够的了,可以使用另一个辅助栈来保存每次的最小值(即之前的最小元素和新入栈的元素两者的最小值),辅助栈中的元素个数和数据栈中的元素个数是一样的,辅助栈栈顶元素即当前数据栈的最小值。

      code:

      public:
      void push(int value) {
          dataStack.push(value);
          if(minStack.empty() || value < minStack.top())
              minStack.push(value);
          else
              minStack.push(minStack.top());
      }
      void pop() {
          if(!dataStack.empty() && !minStack.empty()){
              dataStack.pop();
              minStack.pop();
          }
      }
      int top() {
          return dataStack.top();
      }
      int min() {
          return minStack.top();
      }
      private:
      stack<int> dataStack,minStack;
      
  • 相关阅读:
    C#
    C#
    C#
    创建一个ROS包
    创建一个工作空间
    ROS的文件系统
    单一职责原因
    策略模式
    UML类图
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6809862.html
Copyright © 2011-2022 走看看