Algorithm 查找最近N分钟内的请求数?

Algorithm 查找最近N分钟内的请求数?,algorithm,Algorithm,假设我们维护一个记录所有请求的网站。如何确定在过去5分钟内任何时间点发出的请求数 我可以在5分钟内找到解决方案。但不知道如何使其在任何时间间隔内通用 我的做法: 我们维持一个300大小的阵列。我们在数组中维护一个指针,它表示当前索引(每秒递增一次)。每当发出请求时,我们只返回指针所引用的值。 要首先填充数组,所有值都是累积的。例如,在第一秒发出的请求数为3,在第二秒发出的请求数为5,在第三秒发出的请求数为0。。。然后数组看起来像 3,8,8,0….,0,其中指针指向索引2 (快进到4:59分钟,

假设我们维护一个记录所有请求的网站。如何确定在过去5分钟内任何时间点发出的请求数

我可以在5分钟内找到解决方案。但不知道如何使其在任何时间间隔内通用

我的做法:

我们维持一个300大小的阵列。我们在数组中维护一个指针,它表示当前索引(每秒递增一次)。每当发出请求时,我们只返回指针所引用的值。 要首先填充数组,所有值都是累积的。例如,在第一秒发出的请求数为3,在第二秒发出的请求数为5,在第三秒发出的请求数为0。。。然后数组看起来像
3,8,8,0….,0,其中指针指向索引2

(快进到4:59分钟,数组内容为) 3,8,8,…,180,0
其中,ptr指的是索引298,因为我们尚未填充第299个索引

现在让我们假设接下来2秒钟记录的请求数为5和2。数组看起来像:
3、8、8、…、180、185(5:00更新)
(185+2-3(旧值)),8,8,…..,180185=>184,8,8,…..,180185(5:01更新)
ptr指的是第0个索引。因此,到目前为止,在过去5分钟内提出的请求数量为184

在类似的行中,我们应该能够在O(1)中的任何时间点返回值

但如何使解决方案通用?在这个意义上,如果时间段是任意的,比如在过去10分钟内,在过去20分钟内,在过去1分钟内,找不到请求,该怎么办。
我认为我们可以利用段树,但我们最终会修改每秒钟的所有值,这太昂贵了。提出map reduce pgm将是一个O(N)解决方案,可以在发出getRequestsinLastNMins()请求时触发pgm。但是我正在寻找一些可以在O(1)中完成的事情。

复制and,或者,或者,或者,也许我没有正确理解,但是为什么你不能在一个数组中为每秒钟维护一个累积的总和(比如
num\u requests
),只返回
num\u requests(t)-num\u requests(t-n)+1
这里是当前时间?谢谢@jwpat7。很抱歉没有注意到重复的问题。@Hari Shankar:那么你会每秒钟更新一次数组吗?因此,如果在过去5小时内没有请求,那么您的数组是否包含60*60*5?您将如何事先确定阵列的大小