P1-4 设计一个有getMin功能的栈
第一种设计方案
class getMinStack(object):
def __init__(self):
self.stackData = []
self.stackMin = []
def push(self, newNum):
self.stackData.append(newNum)
if not self.stackMin or newNum <= self.stackMin[-1]:
self.stackMin.append(newNum)
def pop(self):
if len(self.stackData) == 0:
raise Exception("栈为空")
value = self.stackData.pop()
if value == self.stackMin[-1]:
self.stackMin.pop()
return value
def getMin(self):
if len(self.stackMin) == 0:
raise Exception("栈为空")
else:
return self.stackMin[-1]
s = getMinStack()
n = int(input())
for _ in range(n):
command = input().split()
if command[0] == 'push':
s.push(int(command[1]))
elif command[0] == 'pop':
s.pop()
elif command[0] == 'getMin':
print(s.getMin()) . 运行时间 2415ms
. 占用内存 11612KB
第二种设计方案
class getMinStack(object):
def __init__(self):
self.stackData = []
self.stackMin = []
def push(self, newNum):
self.stackData.append(newNum)
if not self.stackMin or newNum <= self.stackMin[-1]:
self.stackMin.append(newNum)
else:
self.stackMin.append(self.stackMin[-1])
def pop(self):
if len(self.stackData) == 0:
raise Exception("栈为空")
self.stackMin.pop()
return self.stackData.pop()
def getMin(self):
if len(self.stackMin) == 0:
raise Exception("栈为空")
else:
return self.stackMin[-1]
s = getMinStack()
n = int(input())
for _ in range(n):
command = input().split()
if command[0] == 'push':
s.push(int(command[1]))
elif command[0] == 'pop':
s.pop()
elif command[0] == 'getMin':
print(s.getMin()). 运行时间 2237ms
. 占用内存 10696KB
书上说
方案一 入栈时更省空间,出栈时更费时间;
方案二 入栈时更费空间,出栈时更省时间
可我感觉方案二 在运行时间和占用内存上都占优势 仅Python实现如此
排行榜上的优质答案:
import sys
num = int(sys.stdin.readline()) # 使用标准输入 仅读取一行(包括换行符)
stack = []
for i in range(num):
op = sys.stdin.readline().split()
if op[0] == 'push':
stack.append(int(op[1]))
if op[0] == 'pop':
stack.pop()
elif op[0] == 'getMin':
print(min(stack))

京公网安备 11010502036488号