题目一:模板队列
解题思路:
可以调用Python中的队列模块,也可以自己写。唯一要注意的就是题目中输入的第一行为步骤次数。所以需要判断进行了多少步,然后来结束程序。
代码:
1、自己写
class queue(object):
def __init__(self):
self.__list = []
def is_empty(self):
return self.__list == []
def push(self, item):
self.__list.append(item)
def pop(self):
if self.is_empty():
return print("ERR_CANNOT_POP")
self.__list.pop(0)
def query(self):
if self.is_empty():
return print("ERR_CANNOT_QUERY")
return self.__list[0]
def size(self):
return len(self.__list)
s = queue()
cishu = int(input())
i = 0
while i != cishu:
i = i + 1
caozuo = list(map(int, input().split()))
if caozuo[0] == 1:
s.push(caozuo[1])
elif caozuo[0] == 2:
s.pop()
elif caozuo[0] == 3:
print(s.query())
elif caozuo[0] == 4:
print(s.size())
2、直接用queue()模块
from queue import Queue
s=Queue()
cishu=int(input())
i=0
while i!=cishu:
i=i+1
caozuo=list(map(int,input().split( )))
if caozuo[0]==1:
s.put(caozuo[1])
elif caozuo[0]==2:
if s.empty():
print("ERR_CANNOT_POP")
continue
s.pop()
elif caozuo[0]==3:
if s.empty():
print("ERR_CANNOT_QUERY")
continue
print(s.get())
elif caozuo[0]==4:
print(s.qsize())
题目二:最近的请求次数
解题思路:
利用队列的性质,把后进来的与第一个的时间进行比较,超时则把第一个删去。留下的就是在3000毫秒内的请求。
AC代码:
class RecentCounter:
def __init__(self):
self.request=[]
def ping(self, t: int) -> int:
self.request.append(t)
while t-self.request[0]>3000: # 判断是否超时
del self.request[0] # 删去超时的请求
return len(self.request)
# Your RecentCounter object will be instantiated and called as such:
# obj = RecentCounter()
# param_1 = obj.ping(t)