博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Logger Rate Limiter 十秒限时计数器
阅读量:5282 次
发布时间:2019-06-14

本文共 2464 字,大约阅读时间需要 8 分钟。

[抄题]:

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 1logger.shouldPrintMessage(1, "foo"); returns true; // logging string "bar" at timestamp 2logger.shouldPrintMessage(2,"bar"); returns true;// logging string "foo" at timestamp 3logger.shouldPrintMessage(3,"foo"); returns false;// logging string "bar" at timestamp 8logger.shouldPrintMessage(8,"bar"); returns false;// logging string "foo" at timestamp 10logger.shouldPrintMessage(10,"foo"); returns false;// logging string "foo" at timestamp 11logger.shouldPrintMessage(11,"foo"); returns true;

 [暴力解法]:

时间分析:

空间分析:

[奇葩输出条件]:

[奇葩corner case]:

[思维问题]:

[一句话思路]:

直接用哈希表

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

没有考虑到更新的情况:0T-8F-11T-14F。 t+10k == timestamp是写不完的,不妨逆向思考 timestamp - t <10

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

不妨逆向思考 timestamp - t <10

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

典型的key- value模式

[关键模板化代码]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

362. Design Hit Counter 五分钟以内的敲打数:没什么特色,用数据就行了吧

 [代码风格] :

class Logger {    /** Initialize your data structure here. */    HashMap
map; public Logger() { map = new HashMap<>(); } /** 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. */ public boolean shouldPrintMessage(int timestamp, String message) { //no message if (!map.containsKey(message)) { map.put(message, timestamp); return true; //message but time is wrong }else if ((timestamp - map.get(message)) >= 10) { map.put(message, timestamp); return true; }else { return false; } }}/** * Your Logger object will be instantiated and called as such: * Logger obj = new Logger(); * boolean param_1 = obj.shouldPrintMessage(timestamp,message); */
View Code

 

转载于:https://www.cnblogs.com/immiao0319/p/8552190.html

你可能感兴趣的文章
编程:对经验世界的析构与建构
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
vim linux下查找显示^M并且删除
查看>>
poj100纪念
查看>>
ExtJs4 笔记(5) Ext.Button 按钮
查看>>
把execl导入到数据库中
查看>>
阿里云人脸比对API封装
查看>>
如何将数据库中的表导入到PowerDesigner中(转)
查看>>
汇编总结一
查看>>
html5-表单常见操作
查看>>
String = ""和String = null的区别
查看>>
C#测试题若干,都是基础阿
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
用cookie登录慕课网络教学中心刷评论
查看>>
Qt 中获取本机IP地址
查看>>
基本数据类型(int, bool, str)
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>