class stack:
def __init__(self):
self.items =
def empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def peek(self):
if not self.empty():
return self.items[len(self.items) - 1]
else:
return none
def pop(self):
if not self.empty():
return self.items.pop()
else:
print('棧已經為空')
def push(self, x):
class mystack:
def __init__(self):
self.elemstack = stack() # 用來儲存棧中的元素
self.minstack = stack() # 棧頂永遠儲存當前elemstack中最小的值
def push(self, data):
self.elemstack.push(data)
if self.minstack.empty():
self.minstack.push(data)
elif data < self.minstack.peek():
self.minstack.push(data)
def pop(self):
topdata = self.elemstack.peek()
self.elemstack.pop()
if topdata == self.mins():
self.minstack.pop()
return topdata
def mins(self):
if self.minstack.empty():
return 2 ** 32
else:
return self.minstack.peek()
if __name__ == '__main__':
stack = mystack()
stack.push(5)
print('棧中最小值為:' + str(stack.mins()))
stack.push(6)
print('棧中最小值為:' + str(stack.mins()))
stack.push(2)
print('棧中最小值為:' + str(stack.mins()))
stack.pop()
print('棧中最小值為:' + str(stack.mins()))
執行結果如下:
棧中最小值為:5
棧中最小值為:5
棧中最小值為:2
棧中最小值為:5
最小棧O 1 空間複雜度實現
設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。常見的一道題目,很多解答都是兩個棧的做法,這裡提供一下o 1 空間複雜度的做法。使用兩個棧的原因是,我...
時間複雜度為O(1)的跳台階
分析 這是一道典型的動態規劃的題目,我們可以這樣想,我們最後一步可以跳1級,也可以跳2級,跳 跳n級,我們用最後一步跳一級來舉例子,假設最後一步跳1級,那還剩下n 1個台階,又可以分為最後一步跳1級,2級 直到n 1級。好啦,就分析到這裡,我們可以看到當我們最後一步跳一級的時候,剩下的n 1級台階又...
O 1 複雜度求乙個棧的最小值
要求乙個棧的最小值,第一反應肯定是乙個個出棧,那樣太蠢了,如何更優呢?第乙個思路就是自己定義乙個指標,始終指向儲存了最小值的那個節點不就行了。看似正確,但是當你最小值的那個節點出棧了,那麼如何找到下乙個最小值呢?因此,我們需要乙個資料結構來儲存每乙個狀態下的最小值。即我們應當知道每當棧中插入乙個新元...