1. 程式人生 > >棧的最小值查詢(O1)

棧的最小值查詢(O1)

問題描述

對棧增加一個獲取最小值的方法(getMin),要求,
時間複雜度為O(1)。

錯誤的解決思路

  1. 定義一個minIndex,儲存最小值的下標。
  2. 每次push的時候比較大小,
    如果小於最小值,則minIndex修改為當前下標,
    否則不修改。

這樣貌似可以,但是發現一個嚴重的問題,
如果pop操作,把最小值出棧後,minIndex就無效了。

正確的解決思路

  1. 定義一個額外的棧minIndexStack,儲存每次push和pop操作後的最小值下標。
  2. 每次push的時候比較大小,
    如果小於最小值,則同時push最小值的下標到minIndexStack中,
    否則將minIndexStack的棧頂元素重複push一次。
  3. 每次pop操作,原有棧和額外的棧都pop操作。
    這樣用空間換時間的操作完成。