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) }
提交结果: