实现栈的基本操作且O(1)时间复杂度获取栈中的最小值
方法一:辅助栈。一个基本栈执行栈的基本操作,另一个辅助栈跟着基本栈的行为处理栈中的最小值,栈的首元素就是最小值,基本栈提前push一个INT_MAX。
方法二:差值栈。不需要额外的辅助空间。基本栈里存储当前值与最小值的差值,并维护当前的最小值。要push元素x时,若栈为空,push0到基本栈,min=x;若栈不为空,push(x-min)到基本栈,min=min(min,x)。要获取栈的首元素时,若基本栈的首元素diff<0,说明当初在diff push的元素比当时的最小值小,则在diff push的元素就是现在的最小值min,如果还要pop,则需要恢复pop后的栈最小值为min-diff;否则,在diff push的元素比当时的最小值,即现在的最小值min大,在diff push的元素为min+diff,min不需要改变,pop的时候直接pop。

参考链接:155. 最小栈
最小栈:面试的时候被问到不能用额外空间

创建于2022.5.21/16.05,修改于2022.5.21/16.06