当前位置:   article > 正文

leetcode:359. 日志速率限制器_日志限流器

日志限流器

 题目来源

leetcode:359. 日志速率限制器

题目描述

请你设计一个日志系统,可以流式接收日志以及它的时间戳。

该日志会被打印出来,需要满足一个条件:当且仅当日志内容 在过去的 10 秒钟内没有被打印过。

给你一条日志的内容和它的时间戳(粒度为秒级),如果这条日志在给定的时间戳应该被打印出来,则返回 true,否则请返回 false。

要注意的是,可能会有多条日志在同一时间被系统接收。

实例:

  1. Logger logger = new Logger();
  2. // 日志内容 "foo" 在时刻 1 到达系统
  3. logger.shouldPrintMessage(1, "foo"); returns true;
  4. // 日志内容 "bar" 在时刻 2 到达系统
  5. logger.shouldPrintMessage(2,"bar"); returns true;
  6. // 日志内容 "foo" 在时刻 3 到达系统
  7. logger.shouldPrintMessage(3,"foo"); returns false;
  8. // 日志内容 "bar" 在时刻 8 到达系统
  9. logger.shouldPrintMessage(8,"bar"); returns false;
  10. // 日志内容 "foo" 在时刻 10 到达系统
  11. logger.shouldPrintMessage(10,"foo"); returns false;
  12. // 日志内容 "foo" 在时刻 11 到达系统
  13. logger.shouldPrintMessage(11,"foo"); returns true;

题目解析

思路

- 用一个map建立消息和时间戳之间的映射
- 当调用shouldPrintMessage时:
    - 如果发现msg不存在map中,那么建立映射并返回true
    - 如果发现msg在map中,那么先比较curr.time > 10 + map[msg].time,如果成立,那么需要返回true否则返回false,在返回之前需要更新map

实现

  1. class Logger {
  2. std::unordered_map<std::string, int> m;
  3. public:
  4. Logger() {}
  5. bool shouldPrintMessage(int timestamp, string message) {
  6. bool flag = false;
  7. if(!m.count(message) || m[message] + 10 < timestamp){
  8. flag = true;
  9. }
  10. m[message] = timestamp;
  11. return flag;
  12. }
  13. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/565833
推荐阅读
相关标签
  

闽ICP备14008679号