LeetCode 933. Number of Recent Calls

LeetCode 933. Number of Recent Calls (Easy)

这个题我看了半天没看懂,网上搜也都没人说明白了,只好直接看答案了。

看了答案其实这题非常简单。我在这里稍微解释一下吧。 ping(int t)这个方法是指,回溯3秒,看一共发了多少次ping请求。这3000毫秒是双闭区间,也就是说,[t-3000, t], 当前时间点要算进去,恰好3000毫秒前的也要算进去。

以上仅是翻译了一下题目,这么看恐怕谁都不明白说的是啥。下面我再详细解释一下。我们现在需要设计一个类,ping是唯一一个方法。ping(int t)这个方法的t,是指当前的时间点,比如你调用ping(5000),意思就是在5000这个时间点,发了一个ping请求。那么如果调用ping(5001),就是在5001这个时间点又发了一次ping请求。就把这些ping的时间点,看作数轴上的点,5000的位置和5001的位置分别有一个点。那么ping(5001)应该返回什么呢?应该从5001这个点,往前数3000毫秒,也就是2001这个点,在[2001,5001]这个闭区间内,有多少个点呢?结果当然是2,原因是我们刚刚在5000的时间点ping过一次,在5001这个时间点又ping了一次。

关于题目给的example更是莫名其妙。

Input: inputs = ["RecentCounter","ping","ping","ping","ping"], inputs = [[],[1],[100],[3001],[3002]]
Output: [null,1,2,3,3]

我看了半天才明白。这两个inputs数组,你要放在一起,一一对应来看。首先是RecentCounter和[]。这是说新建了一个RecentCounter对象,然后什么也没干。第二个是"ping"和[1],这是说调用了一次ping方法,传入的参数为1。依次类推,后面几个ping就是调用了几次ping方法。每次调用应该返回的结果,就是output对应的位置上那个值。千万不要把这些真的理解为数组。

我实在是不明白出题这人给example时想的是啥。。。纯误导。

答案:

class RecentCounter {
    Queue<Integer> q;
    public RecentCounter() {
        q = new LinkedList();
    }

    public int ping(int t) {
        q.add(t);
        while (q.peek() < t - 3000)
            q.poll();
        return q.size();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值