每日一题(2022-05-06)——最近的请求次数

933. 最近的请求次数

題目描述:

在这里插入图片描述

在这里插入图片描述

题意解释:

就是返回时间在[t-3000, t]的请求数:

借助例子来理解:
["RecentCounter", "ping", "ping", "ping", "ping"]
[[],[642],[1849],[4921],[5936]]
在代码中就是:

func main() {
	rc := Constructor() // 初始化一个空切片
	fmt.Println(rc.Ping(642),
		rc.Ping(1849), 
		rc.Ping(4921),
		rc.Ping(5936),
	)
}

第一次请求:时间为642 ,此时为空,不存在比他早3000的请求,加入队列[642]
第二次请求:时间为1849,此时队列的第一个元素并不比这次请求时间早3000,所以依旧加入队列[642,1849]
第三次请求: 时间为4921,(这里是个转折点)可以看到我们此时队列里俩次请求时间都比这次早3000多,所以要把他俩剔除掉,将这次请求加入队列[4921]
第四次请求:时间为5936,此时队列里的元素并不比这次请求早3000,所以加入队列即可[4921,5936]
所以输出结果为[1,2,1,2]

题解:

type RecentCounter struct {
	queue []int
}

func Constructor() RecentCounter {
	return RecentCounter{make([]int, 0)}
}

func (rc *RecentCounter) Ping(t int) int {
	rc.queue = append(rc.queue, t)
	// 如果队列中,请求的时间不在[t-3000,t](这个是t是最新一次请求的时间)以内,就给他截掉
	for rc.queue[0] < t-3000 {
		rc.queue = rc.queue[1:]
	}
	return len(rc.queue)
}

提交结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值