参考左程云《程序员代码面试指南》,因为通常用的是Python,而书中代码是JAVA编写,所以打算将其中代码改写成Python代码,算法思路自行购书查看。不久就要投入茫茫求职人海中,希望能坚持下来……
# 设计一个有getMin功能的栈
class Mystack1:
def __init__(self):
self._stackData = []
self._stackMin = []
def push(self, newNum):
if not self._stackMin:
self._stackMin.append(newNum)
elif newNum <= self.getmin():
self._stackMin.append(newNum)
self._stackData.append(newNum)
def pop(self):
if not self._stackData:
raise RuntimeError("Your stack is empty.")
value = self._stackData.pop()
if value == self.getmin():
self._stackMin.pop()
return value
def getmin(self):
if not self._stackMin:
raise RuntimeError("Your stack is empty")
return self._stackMin[-1]
class Mystack2:
def __init__(self):
self._stackData = []
self._stackMin = []
def push(self, newNum):
if not self._stackMin:
self._stackMin.append(newNum)
elif newNum < self.getmin():
self._stackMin.append(newNum)
else:
newMin = self._stackMin[-1]
self._stackMin.append(newMin)
self._stackData.append(newNum)
def pop(self):
if not self._stackData:
raise RuntimeError("Your stack is empty.")
self._stackMin.pop()
return self._stackData.pop()
def getmin(self):
if not self._stackMin:
raise RuntimeError("Your stack is empty.")
return self._stackMin[-1]
if __name__ == "__main__":
mystack1 = Mystack1()
mystack1.push(2)
mystack1.push(1)
mystack1.pop()
mystack1.push(0)
mystack1.push(3)
print(mystack1.getmin())
mystack2 = Mystack2()
mystack2.push(2)
mystack2.push(1)
mystack2.pop()
mystack2.push(0)
mystack2.push(3)
print(mystack2.getmin())