zoukankan      html  css  js  c++  java
  • 剑指-30:包含min函数的栈

    题目

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

    解题思路

    1. 使用 int 保存当前栈最小值,使 min() 调用时可以直接获取
      问题:若当前 pop() 是最小值,将最小值抛出后,无法找到新的最小值
    2. 解决第一步问题
      用一个新的栈放置最小数值的数据,长度与主栈相同。使主栈与最小值栈数据一一对应。
    class MinStack {
    public:
    
      stack<int> mainStack;
      stack<int> minStack;
      /** initialize your data structure here. */
      MinStack() {
          while(!mainStack.empty()) mainStack.pop();
          while(!minStack.empty()) minStack.pop();
      }
      
      void push(int x) {
          mainStack.push(x);
          if (!minStack.empty() && minStack.top() < x) // 当最小值栈为空,或者当前塞入的值不是最小值时,更改x为最小值
              x = minStack.top();
          minStack.push(x);
      }
      
      void pop() {
          mainStack.pop();
          minStack.pop();
      }
      
      int top() {
          return mainStack.top();
      }
      
      int min() {
          return minStack.top();
      }
    };
    
    
    多出了一个栈的空间,空间复杂度变为`O(n)`
    
    1. 优化第二步的空间
      • 栈顶元素需要跟当前最小值元素进行关联
      • 元素用一个指针指向该元素为栈顶时的最小元素
      • 待完善
  • 相关阅读:
    c++ range库
    差分数组
    简单比较一下C++中的引用和指针
    数字图像处理中一张常用图片
    内存池与内存块
    SmartPtr
    Allocator
    Java学习第12天
    Java学习第11天
    Java学习第10天
  • 原文地址:https://www.cnblogs.com/forever-snow/p/15145811.html
Copyright © 2011-2022 走看看