第一行输入一个整数N,表示对栈进行的操作总数。
下面N行每行输入一个字符串S,表示操作的种类。
如果S为"push",则后面还有一个整数X表示向栈里压入整数X。
如果S为"pop",则表示弹出栈顶操作。
如果S为"getMin",则表示询问当前栈中的最小元素是多少。
对于每个getMin操作,输出一行表示当前栈中的最小元素是多少。
6 push 3 push 2 push 1 getMin pop getMin
1 2
1<=N<=1000000
-1000000<=X<=1000000
数据保证没有不合法的操作
#利用两个栈实现 #一个是保存所有数据的栈 #另外一个是保存到现在为止所有数据中最小值的栈 #用python中的list模拟栈 #普通存放数据的栈 normal_stack=[] #存放最小元素的栈 min_stack=[] #获取输入 #input()表示从控制台获得一个输入,返回的是字符串形式 #需要转化为int类型 n=int(input()) #模拟,进行栈的操作 #共操作了n次 for i in range(n): #获取操作命令和数字(如果有) operator=input() #判断操作类型 if operator[:2]=='pu': #分割出要保存的数字 #.split()代表用空格分割字符串 _,number=operator.split() number=int(number) normal_stack.append(number) #更新最小栈 #如果当前存放最小值的栈为空 if len(min_stack)==0: #直接压入 min_stack.append(number) #否则的话 #如果当前元素小于栈顶元素,压入 else: #等于是允许最小值重复出现 if number<=min_stack[-1]: min_stack.append(number) if operator[:2]=='ge': print(min_stack[-1]) if operator[:2]=='po': #list中的pop方法默认弹出最后一个元素 pop_num=normal_stack.pop() #如果弹出的是最小值,最小值栈也要更新 if pop_num==min_stack[-1]: min_stack.pop()