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)
}