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;
      
  • 相关阅读:
    codeforces 616B Dinner with Emma
    codeforces 616A Comparing Two Long Integers
    codeforces 615C Running Track
    codeforces 612C Replace To Make Regular Bracket Sequence
    codeforces 612B HDD is Outdated Technology
    重写父类中的成员属性
    子类继承父类
    访问修饰符
    方法的参数
    实例化类
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6809862.html
Copyright © 2011-2022 走看看