首页 > 其他 > 详细

剑指-30:包含min函数的栈

时间:2021-08-16 10:31:33      阅读:12      评论:0      收藏:0      [点我收藏+]

题目

定义栈的数据结构,
请在该类型中实现一个能够得到栈的最小元素的 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. 优化第二步的空间
    • 栈顶元素需要跟当前最小值元素进行关联
    • 元素用一个指针指向该元素为栈顶时的最小元素
    • 待完善

剑指-30:包含min函数的栈

原文:https://www.cnblogs.com/forever-snow/p/15145811.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!