使用Python检查满足给定条件将处理的请求数量的程序
假设我们有一个请求列表,其中每个列表包含[uid,time_sec]这样的元素(uid是用户ID,time_sec是时间戳)。这表示在时间戳time_sec上,其ID为uid的用户已向网站发出请求。我们还有两个值u和g,其中u表示在任何<60秒帧中允许最大数量的请求限制,对于给定的uid和g是任何<60秒帧中允许的请求的最大数量限制。现在,如果我们想一个接一个地处理每个请求并对其进行速率限制。如果有多个用户同时发出请求,具有较低uid的请求将被首先处理,否则该请求将被放弃。我们必须找到成功处理的请求总数。
因此,如果输入是类似于requests = [[0,1],[1,2],[1,3]] u = 1 g = 5,则输出将是2,因为用户0和1可以在时间1和2发送请求,但用户1的第二个请求不会被处理,因为一个用户在60秒的帧中最多只能发送1个请求。
要解决此问题,我们将按以下步骤执行-
- last :=一个空映射
- total:空双端队列
- windowtime :60
- 如果帧的2个请求具有相同的uid,则基于时间对请求进行排序
- amount:0
- 对于请求中的每个r,执行以下操作
- [uid,time]:= r
- while total大小> 0 and total[0] + windowtime <= time时执行以下操作
- 删除total的左侧项
- 当last [uid]大小> 0 and last [uid,0] + windowtime <= time时执行以下操作
- 从last [uid]删除左侧项
- if total大小< g朗月数且last [uid]大小< u,则
- 在last [uid]的末尾插入时间
- 在total的末尾插入时间
- amount:=amount+1
- 返回amount
让我们看以下实现以更好地理解-
更多Python相关文章,请阅读:Python 教程