1. 程式人生 > 實用技巧 >Leetcode155.最小棧題解

Leetcode155.最小棧題解

題意

所謂最小棧就是要在本來棧的定義上多了一個操作,getMin()操作——返回棧中最小值。

思路

  • 很樸素的一個想法是用返回最小值的時候從頭到尾遍歷一遍找最小。也就是下面程式碼1.0。實際上提交發現這個是非常耗時的(300ms+)。
  • 程式碼1.0的缺陷在於每次獲得最小值都要去遍歷一遍操作。在此基礎上,有了另一個想法,我們可以用一個變數來儲存最小值。不難想到,當出棧的元素剛好是儲存的最小值的元素的時候,我們如何找到下一個最小值。我的想法很乾脆,遍歷一遍找就好了。出乎意料的是,表現竟然還可以(60ms+),和題解的表現基本持平。
  • 最後這個思路是看了題解才知道的,用輔助棧的思路。每次入棧元素的時候輔助棧就入隊當前的最小元素。即任何時刻棧的最小元素都在輔助棧棧頂
    。實在是妙