棧求最小值

題目:

 實現一個棧,它有三個操作。

 1、壓棧push。

 2、出棧pop。

 3、找出當前棧的最小元素。

 要求:這三個操作的時間複雜度是O(1)。

 解:

 使用兩個數組(或鏈表),element和least,它們的大小一致。element數組用來存放壓棧和出棧的元素;least數組用來存放當前棧中最小值的下標。

 1、push操作。把需要壓棧的元素A放進element數組棧頂中、A與least棧頂的值m對應的element最小值比較,如果A小,則往least的棧頂插入A對應的下標值;否則,往least的棧頂插入m值。

 2、pop操作。同時把element和least的棧頂元素彈出。

 3、當前least棧頂對應的element的值。

 知識點:

 這裏充分地利用了棧的特性。

 用空間換時間。

 如果使用鏈表實現的話,則least存放的就不是element的下標,而應存放指向對應element元素的指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章