剑指offer 30:包含min函数的栈

题意

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

思路

常规思路的问题:

  1. 如果每次push对栈排序,让整个栈保持有序状态,实际上已经破坏了栈这个结构,而且复杂度肯定不是O(1)
  2. 如果用一个变量记录最小值,当这个最小值被pop出去后,找不到次小值。当然你也可以找个变量存次小值,这样的问题是第三小的值你还得找个变量存,无穷尽也。

因此,提出使用一个辅助栈的方法:

  1. 当栈为空时,将一个值push进栈和辅助栈
  2. 第二个数来时,比较这个数和辅助栈中的数哪个大,如果这个数大,就继续push辅助栈中那个较小的数进入辅助栈,如果当前数小,就push这个小的数进入辅助栈。
  3. push的情况依次类推,在辅助栈中的数从顶往下必然是递增的。因此栈顶一定是最小的书,第二个就是次小,往下越来越大。
  4. pop时,把辅助栈的元素一起pop出来。也就是更新当栈顶元素进入栈造成的大小值的影响。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章