设计一个有getMin功能的栈 (python)
生活随笔
收集整理的這篇文章主要介紹了
设计一个有getMin功能的栈 (python)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
實現一個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小元素的操作
要求:
1、pop、push、getMin操作的時間復雜度都是O(1)
2、設計的棧類型可以使用現成的棧結構
解決辦法:
使用兩個棧,一個棧用來保存當前棧中的元素,其功能和一個正常的棧沒有區別,這個棧記為stackData; 另一個棧用于保存每一步的最小值,這個棧記為stackMin。具體實現方式如下:
1? ? ? ?同步壓入? ? ? ? ? 1
2? ? ? ?重復壓入 1? ? ? ?1
1? ? ? ?同步壓入? ? ? ? ? 1
5? ? ? ?重復壓入3? ? ? ? 3
4? ? ? ?重復壓入3? ? ? ? 3
3? ? ? ?同步壓入? ? ? ? ? 3
stackData? ? ? ? ? ? ? ?stackMin
class Stack():def __init__(self):self.item = []def pop(self):if len(self.item)==0:return "the Stack is empty"else:self.item.pop()def push(self,item):self.item.append(item)def peek(self):return self.item[len(self.item)-1]class MyStack():def __init__(self):self.stackData = Stack()self.stackMin = Stack()def push(self,num):if len(self.stackMin.item) == 0:self.stackMin.push(num)elif num < self.getmin():self.stackMin.push(num)else:newnum = self.stackMin.peek()self.stackMin.push(newnum)self.stackData.push(num)def pop(self):if len(self.stackData.item)==0:return "the stackData is empty"self.stackMin.item.pop()return self.stackData.item.pop()def getmin(self):if len(self.stackMin.item) == 0:return "the stackMin is empty"return self.stackMin.peek()s =MyStack()s.push(3) s.push(4) s.push(5) s.push(1) s.push(2) s.push(1)s.stackData.item s.stackMin.item?
總結
以上是生活随笔為你收集整理的设计一个有getMin功能的栈 (python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 荷兰国旗问题
- 下一篇: websocket python爬虫_p