目录
原题链接
剑指offer_在线编程_牛客网 (nowcoder.com)
题目描述
定义一个栈的数据结构,并实现一个能够在常数时间内(O(1))获取栈的最小元素的min
函数。要求在该栈中,调用min
、push
以及pop
的时间复杂度都是O(1)。
题目要求各函数的调用总次数不超过20000次。
解决方案
思路分析
要在O(1)时间复杂度内实现获取栈的最小值,我们需要借助辅助栈来存储当前栈中每个元素入栈时的最小值。辅助栈中的栈顶元素始终是当前主栈中的最小元素。
核心思路
- 主栈(stack):用于存储所有入栈的元素。
- 辅助栈(minStack):用于存储主栈中对应位置的最小值。
流程图解
操作细节
- push操作:将元素压入主栈,同时将该元素与当前辅助栈的栈顶元素(即当前最小值)进行比较。如果该元素小于或等于当前最小值,则也将该元素压入辅助栈。
- pop操作:弹出主栈栈顶元素。如果该元素等于辅助栈的栈顶元素,则同时弹出辅助栈的栈顶元素。
- min操作&