LeetCode.155.最小棧
阿新 • • 發佈:2018-12-09
155.最小棧
設計一個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。
- push(x) – 將元素 x 推入棧中。
- pop() – 刪除棧頂的元素。
- top() – 獲取棧頂元素。
- getMin() – 檢索棧中的最小元素。
構建兩個棧
資料棧:一個用來儲存資料的棧。
最小索引棧:另一個棧的每一位i,用來儲存前i位(包括第i位)的最小數的索引。
getMin():取出最小值操作:返回最小索引棧的最後一位,即當前棧的最小值的索引。
python程式碼如下:
class MinStack: def __init__(self): """ initialize your data structure here. 初始化兩個棧, 一個棧用來儲存資料 另一個棧用來儲存前i位最小值的索引 """ self.stack = [] self.stackindex = [] def stack_empty(self): """ 判斷當前棧是否為空 """ return len(self.stack) == 0 def push(self, x): """ :type x: int :rtype: void """ if self.stack_empty(): self.stackindex.append(0) #如果資料棧為空,索引棧就應該新增索引0.即初始位置 else: if x < self.stack[self.stackindex[-1]]: self.stackindex.append(len(self.stackindex))#如果當前新增的數是更小的數,索引棧新增資料棧長度為新的最小值的索引 else: self.stackindex.append(self.stackindex[-1])#如果不是更小的數,索引棧就新增此時索引棧的最後一位的值 self.stack.append(x) def pop(self): """ :rtype: void """ if self.stack_empty(): raise Exception("under flow") #資料棧為空丟擲下溢異常 else: del(self.stackindex[-1]) #刪除索引棧的最後一位 return self.stack.pop() def top(self): """ :rtype: int """ return self.stack[-1] def getMin(self): """ :rtype: int """ return self.stack[self.stackindex[-1]] #資料棧最小值的索引儲存在索引棧的最後一位