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

这个题目,我首先想到是在数据结构中使用一个值去存储整个栈中的最小值。 push 进来的元素如果比它小,那么就更新 最小值。但是这个方法有一个问题,当这个最小值 pop 出去了,那该如何更新最小值呢?有一种方法是遍历栈,可是这样 就不满足题目中时间复杂度都是 O(1) 的要求。

再一想,能否把前一个最小值存下来?那么这就需要一个最小值的栈,栈顶元素为原始栈的最小值。这个最小值的栈和原 始栈的大小有什么关系呢?是否需要重新分配一个变量去控制最小栈的栈顶位置呢?其实不用。最小值栈的大小和原栈保持 一致是最简单的,具体的算法如下:

1、分配一个和原栈大小相同的最小值栈
2、第一个元素同时存入原栈和最小值栈
3、第二个及之后的元素,原栈正常入栈。如果该元素小于最小值栈栈顶元素,则将该元素入最小值栈;反之,将最小值的栈顶元素再入栈
4、对于出栈操作,原栈和最小值栈保持一致
5、min 函数每次返回最小值栈的栈项元素

这是我的提交记录

以上。