Logger Rate Limiter -- LeetCode

Design a logger system that receive stream of messages along with its timestamps, each message should be printed if and only if it is not printed in the last 10 seconds.

Given a message and a timestamp (in seconds granularity), return true if the message should be printed in the given timestamp, otherwise returns false.

It is possible that several messages arrive roughly at the same time.

Example:

Logger logger = new Logger();

// logging string "foo" at timestamp 1
logger.shouldPrintMessage(1, "foo"); returns true; 

// logging string "bar" at timestamp 2
logger.shouldPrintMessage(2,"bar"); returns true;

// logging string "foo" at timestamp 3
logger.shouldPrintMessage(3,"foo"); returns false;

// logging string "bar" at timestamp 8
logger.shouldPrintMessage(8,"bar"); returns false;

// logging string "foo" at timestamp 10
logger.shouldPrintMessage(10,"foo"); returns false;

// logging string "foo" at timestamp 11
logger.shouldPrintMessage(11,"foo"); returns true;

思路:用队列来记录当前的所有消息,用一个set来记录哪些消息在这个队列中。

 1 class Message {
 2 public:
 3     int timestamp;
 4     string msg;
 5     Message(int ts, string m) : timestamp(ts), msg(m) {}
 6 };
 7 class Logger {
 8 public:
 9     /** Initialize your data structure here. */
10     queue<Message> logQueue;
11     unordered_set<string> msgInQueue;
12     Logger() {
13
14     }
15
16     /** Returns true if the message should be printed in the given timestamp, otherwise returns false.
17         If this method returns false, the message will not be printed.
18         The timestamp is in seconds granularity. */
19     bool shouldPrintMessage(int timestamp, string message) {
20         //remove all msgs before 10s ago
21         while (!logQueue.empty() && logQueue.front().timestamp + 10 <= timestamp) {
22             msgInQueue.erase(logQueue.front().msg);
23             logQueue.pop();
24         }
25         bool notInQueue = msgInQueue.count(message) == 0;
26         //this msg will be printed, add it to log
27         if (notInQueue) {
28             logQueue.push(Message(timestamp, message));
29             msgInQueue.insert(message);
30         }
31         return notInQueue;
32     }
33 };
34
35 /**
36  * Your Logger object will be instantiated and called as such:
37  * Logger obj = new Logger();
38  * bool param_1 = obj.shouldPrintMessage(timestamp,message);
39  */
时间: 2024-12-24 15:23:50

Logger Rate Limiter -- LeetCode的相关文章

359. Logger Rate Limiter

/* * 359. Logger Rate Limiter * 2016-7-14 by Mingyang * 很简单的HashMap,不详谈 */ class Logger { HashMap<String, Integer> map; /** Initialize your data structure here. */ public Logger() { map = new HashMap<String, Integer>(); } /** * Returns true if

[LeetCode] Logger Rate Limiter 记录速率限制器

Design a logger system that receive stream of messages along with its timestamps, each message should be printed if and only if it is not printed in the last 10 seconds. Given a message and a timestamp (in seconds granularity), return true if the mes

LeetCode &quot;Logger Rate Limiter&quot;

Queue + hashset class Logger { typedef pair<string, int> Rec; queue<Rec> q; unordered_set<string> hs; public: /** Initialize your data structure here. */ Logger() { } /** Returns true if the message should be printed in the given timesta

Leetcode 359: Logger Rate Limiter

Design a logger system that receive stream of messages along with its timestamps, each message should be printed if and only if it is not printed in the last 10 seconds. Given a message and a timestamp (in seconds granularity), return true if the mes

Logger Rate Limiter

Design a logger system that receive stream of messages along with its timestamps, each message should be printed if and only if it is not printed in the last 10 seconds. Given a message and a timestamp (in seconds granularity), return true if the mes

[LC] 359. Logger Rate Limiter

Design a logger system that receive stream of messages along with its timestamps, each message should be printed if and only if it is not printed in the last 10 seconds. Given a message and a timestamp (in seconds granularity), return true if the mes

Logger Rate Limiter 十秒限时计数器

[抄题]: [暴力解法]: 时间分析: 空间分析: [奇葩输出条件]: [奇葩corner case]: [思维问题]: [一句话思路]: [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: [一刷]: 没有考虑到更新的情况:0T-8F-11T-14F [二刷]: [三刷]: [四刷]: [五刷]: [五分钟肉眼debug的结果]: [总结]: [复杂度]:Time complexity: O() Space complexity: O(

RocksDB Rate Limiter源码解析

这次的项目我们重点关注RocksDB中的一个环节:Rate Limiter.其实Rate Limiter的思想在很多其他系统中也很常用. 在RocksDB中,后台会实时运行compaction和flush操作,这些都会对磁盘进行大量的写操作.可以通过Rate Limiter来控制最大写入速度的上限.因为在某些场景下,突发的大量写入会导致很大的read latency,从而影响系统性能. Rate Limiter的基本原理是令牌桶算法:系统每秒往桶里丢数量为1/QPS的令牌(满了为止),写请求只有

[LeetCode] Design Hit Counter 设计点击计数器

Design a hit counter which counts the number of hits received in the past 5 minutes. Each function accepts a timestamp parameter (in seconds granularity) and you may assume that calls are being made to the system in chronological order (ie, the times