从零开始算法之路 ----最近的请求次数

本文介绍了一个名为RecentCounter的类的设计方案,该类用于计算最近3000毫秒内的请求次数。通过使用队列实现,确保了高效地更新并获取在指定时间窗口内的请求数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题源: leetcode(https://leetcode-cn.com/problems/number-of-recent-calls/)
题目描述:
 写一个 RecentCounter 类来计算最近的请求。
它只有一个方法:ping(int t),其中 t 代表以毫秒为单位的某个时间。
返回从 3000 毫秒前到现在的 ping 数。
任何处于 [t - 3000, t] 时间范围之内的 ping 都将会被计算在内,包括当前(指 t 时刻)的 ping。
保证每次对 ping 的调用都使用比之前更大的 t 值。

思路: 使用一个队列,维持队列中最后一个加入的元素和队列头元素加入的时刻差值小于等于3000即可,返回队列元素个数。

class RecentCounter {
    private:
     queue<int> inputs;

public:
    RecentCounter() {
        
    }
    
    int ping(int t) {
    // 时间进队列
    inputs.push(t);
	// 移除队列中 3 秒之前的时间 
	while(!inputs.empty() && (t - 3000)>inputs.front()) inputs.pop();
	// 返回队列中在范围内的个数
	return inputs.size(); 
    }            
};

/**
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter* obj = new RecentCounter();
 * int param_1 = obj->ping(t);
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值