leetcode 933. Number of Recent Calls(python)

378 阅读1分钟

描述

You have a RecentCounter class which counts the number of recent requests within a certain time frame.

Implement the RecentCounter class:

  • RecentCounter() Initializes the counter with zero recent requests.
  • int ping(int t) Adds a new request at time t, where t represents some time in milliseconds, and returns the number of requests that has happened in the past 3000 milliseconds (including the new request). Specifically, return the number of requests that have happened in the inclusive range [t - 3000, t].

It is guaranteed that every call to ping uses a strictly larger value of t than the previous call.

Example 1:

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

Explanation
RecentCounter recentCounter = new RecentCounter();
recentCounter.ping(1);     // requests = [1], range is [-2999,1], return 1
recentCounter.ping(100);   // requests = [1, 100], range is [-2900,100], return 2
recentCounter.ping(3001);  // requests = [1, 100, 3001], range is [1,3001], return 3
recentCounter.ping(3002);  // requests = [1, 100, 3001, 3002], range is [2,3002], return 3	

Note:

1 <= t <= 109
Each test case will call ping with strictly increasing values of t.
At most 104 calls will be made to ping.

解析

根据题意,只需要使用列表保持当前时间 t 的所有的有效的请求即可,即当有新的请求产生的时候,将其追加到列表 L 中,然后从 L 的第一个元素开始从左往右判断,如果 L[0] < t -3000 则将其去掉,循环这个步骤,将已经过期的请求都去掉,剩下的 L 的长度即为答案。

解答

class RecentCounter(object):
    def __init__(self):
        self.L = []

    def ping(self, t):
        """
        :type t: int
        :rtype: int
        """
        self.L.append(t)
        while self.L[0] < t -3000:
            self.L.pop(0)
        return len(self.L)
        	      
		

运行结果

Runtime: 288 ms, faster than 42.52% of Python online submissions for Number of Recent Calls.
Memory Usage: 18.4 MB, less than 56.80% of Python online submissions for Number of Recent Calls.

原题链接:leetcode.com/problems/nu…

您的支持是我最大的动力