offer 30 包含min函數的棧

包含min函數的棧

image.png

題目分析

本題若是用for對比找最小值,那就是很簡單,可是複雜度很高,因此難點就是怎麼將時間複雜度降到O1
因此此時應該用一個輔助棧B,棧A就是正常入棧出棧,棧B是棧A入棧出棧的最小元素,且最小元素一直在棧頂,調用min函數的時候直接出棧便可
image.png
好比9入棧,此時min就是9,9也入棧A,而後10入棧,此時min仍是9.那10就不入棧B,而後7入棧,此時min是7,因此7也入棧B,而後3入棧,此時min是3,因此3也入棧B,而後5入棧,此時min是3,那5就不入棧B函數

思路

  • 入棧:若是B爲空,那麼元素就得入棧B,若是新加的元素比棧B的棧頂元素小,那麼元素也得入棧B
  • 出棧:若是A出棧元素=B棧頂元素,那B也得出棧
  • top:返回A的棧頂元素
  • min:返回B的棧頂元素
  • 這個是純棧
    image.png
  • 用列表linkedlist表示棧
    image.png
  • 這個是人家別人的思路,永遠拿入棧元素和棧B的棧頂元素進行對比,而後再棧B中入二者中小的那個元素,而後在出棧的時候就不用對比是否是相等了,兩個一塊兒出棧便可
    image.png
相關文章
相關標籤/搜索