題目:
實現一個棧,它有三個操作。
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元素的指針。