每日偷偷刷题933和队列有关
思路
每来一次ping就记录时间,并返回3000s内ping的次数,本题数据量很大,正向暴力肯定是不行的。
初步思路:反向暴力,不删列表数据。从ping的下标往前推,并统计3000s的数据。
反向暴力,做出来耗时6000多秒
差点超时,根本原因就是后面大数据量时每次都要统计3000次。
class RecentCounter(object):
def __init__(self):
self.ping_req = list()
def ping(self, t):
"""
:type t: int
:rtype: int
"""
count = 0
self.ping_req.append(t)
ping_lens = len(self.ping_req)
for i in range(ping_lens - 1, -1, -1):
if (t - self.ping_req[i] <= 3000):
count += 1
else:
break

博客讨论了如何优化数据结构以解决在一个大规模数据场景下,记录并返回过去3000秒内的ping请求次数的问题。通过使用队列(deque)数据结构和删除无效数据的策略,显著提高了算法效率,避免了超时错误。文中给出了Python和C++的实现代码示例,并提到了C语言中使用循环队列的可能性。
最低0.47元/天 解锁文章
226





