题目大意
https://leetcode.com/problems/min-stack/
让你实现一个栈,操作有压入,弹出,获取栈顶,以及获取最小值,要求每种时间复杂度为O(1)
题目分析
本题参考了disscuss区的巧妙解法,竟然用了一个数组(栈)就实现了,巧妙之处在与压栈和出栈,每次压栈时都要检测min是否会被更新,如果会被更新,则先要把旧的min压入栈,然后再压入元素的值。出栈时要检测min和栈顶是否相同,如果相同说明min的值需要用旧的值替代。还要注意,压栈判断条件if (x <= min)
必须有等号,如果没有等号,意味着等于min的元素进栈时只压栈了一次,而出栈判断min == top
时要出栈两次,这就造成了不正确
代码
|
|