-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
359_Logger_Rate_Limiter.py
60 lines (50 loc) · 1.77 KB
/
359_Logger_Rate_Limiter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# class Logger(object):
# def __init__(self):
# """
# Initialize your data structure here.
# """
# self.timestamps = {}
# def shouldPrintMessage(self, timestamp, message):
# """
# Returns true if the message should be printed in the given timestamp, otherwise returns false.
# If this method returns false, the message will not be printed.
# The timestamp is in seconds granularity.
# :type timestamp: int
# :type message: str
# :rtype: bool
# """
# if timestamp < self.timestamps.get(message, 0):
# return False
# self.timestamps[message] = timestamp + 10
# return True
import heapq
class Logger(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.heap = []
self.cache = {}
def shouldPrintMessage(self, timestamp, message):
"""
Returns true if the message should be printed in the given timestamp, otherwise returns false.
If this method returns false, the message will not be printed.
The timestamp is in seconds granularity.
:type timestamp: int
:type message: str
:rtype: bool
"""
while len(self.heap):
if self.heap[0][0] <= timestamp:
temp = heapq.heappop(self.heap)
self.cache.pop(temp[1])
else:
break
if timestamp < self.cache.get(message, 0):
return False
self.cache[message] = timestamp + 10
heapq.heappush(self.heap, (timestamp + 10, message))
return True
# Your Logger object will be instantiated and called as such:
# obj = Logger()
# param_1 = obj.shouldPrintMessage(timestamp,message)