LeetCode 155.最小栈 - C++ - 辅助栈

最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x):将元素 x 推入栈中。
  • pop():删除栈顶的元素。
  • top():获取栈顶元素。
  • getMin():检索栈中的最小元素。

官方思路如下

方法一:使用辅助栈

  • 定义一个[数据栈]来支持 push、pop、top 操作
  • 定义一个[辅助栈]其栈顶为当前最小值,以支持常数时间复杂度的 getMin 操作

代码如下(C++):

class MinStack {
  stack<int> dataStack,minStack;   // 定义数据栈和最小栈
public:
  /** initialize your data structure here. */
  MinStack() {
    minStack.push(INT_MAX);
  }
  void push(int x) {
    dataStack.push(x);  			// 数据栈推入x
    if(minStack.empty() || x <= minStack.top()){	// 如果最小值栈为空或者数据为最小值,推入
      minStack.push(x);
    }
  }
  void pop() {
    if(!dataStack.empty()){
      if(dataStack.top() == minStack.top()){		// 如果当前值为最小值,则删除最小栈栈顶元素
        minStack.pop();				// 删除最小栈栈顶
      }
      dataStack.pop();				// 删除数据栈栈顶
    }
  }
  int top() {
    return dataStack.top();
  }
  int getMin() {
    return minStack.top();
  }
};

时间复杂度 O(1),空间复杂度 O(n)。

方法二:使用 Stack<Node> 除了保存当前值外,额外保存当前最小值。

方法三:自定义 Stack,以单链表形式自定义栈。

放在最后

如果您喜欢我的文章,拜托点赞+收藏+关注,博主会根据大家喜好来推出相关系列文章~

更多精彩内容也可以访问我的博客Aelous-BLog

猜你喜欢

转载自blog.csdn.net/Aelous_dp/article/details/107699660