栈是“后进先出”的线性数据结构,实现一个栈,支持push,pop和getmin,要求时间复杂度均为O(1)
题解:
C++库中的stack的push与pop操作的时间复杂度为O(1),所以问题在于怎么找到栈中的最小值。我们可以用二叉堆,但是负杂度过高。、
于是我们可以想到这样一个办法:记录栈中每个最小值出现的位置,当这个位置上的最小值被弹出时,记录中的这个位置也跟着取消,当有更小的值出现时,记录那个值的位置。但是,我们采用的栈时stl里的栈,不能直接得到最小值的位置。
因此,我们另外创建一个栈2,当一个元素被push进栈1时,更新最小值,并用当前最小值入push进入栈2,当栈1元素被pop时,栈2元素也pop,这样栈2的顶部就保存着最小值,单次查询可以用O(1)实现。