网站开发推广招聘,潍坊小企业网站建设,中国建设工程造价管理协会官网,卖域名赚钱吗请你设计一个日志系统#xff0c;可以流式接收日志以及它的时间戳。
该日志会被打印出来#xff0c;需要满足一个条件#xff1a;当且仅当日志内容 在过去的 10 秒钟内没有被打印过。
给你一条日志的内容和它的时间戳#xff08;粒度为秒级#xff09;#xff0c;如果这…请你设计一个日志系统可以流式接收日志以及它的时间戳。
该日志会被打印出来需要满足一个条件当且仅当日志内容 在过去的 10 秒钟内没有被打印过。
给你一条日志的内容和它的时间戳粒度为秒级如果这条日志在给定的时间戳应该被打印出来则返回 true否则请返回 false。
要注意的是可能会有多条日志在同一时间被系统接收。
示例
Logger logger new Logger();
// 日志内容 foo 在时刻 1 到达系统 logger.shouldPrintMessage(1, foo); returns true;
// 日志内容 bar 在时刻 2 到达系统 logger.shouldPrintMessage(2,bar); returns true;
// 日志内容 foo 在时刻 3 到达系统 logger.shouldPrintMessage(3,foo); returns false;
// 日志内容 bar 在时刻 8 到达系统 logger.shouldPrintMessage(8,bar); returns false; // 日志内容 foo 在时刻 10 到达系统 logger.shouldPrintMessage(10,foo); returns false;
// 日志内容 foo 在时刻 11 到达系统 logger.shouldPrintMessage(11,foo); returns true;
思路我们可以用一个双端队列维护所有出现过的日志然后去掉那些过期的保证队列里是十秒内的就ok但是费时间。
我的思路是一个map记录最后一次出现的时间新日志请求去查一下map即可这样做的好处是速度快坏处是map的空间可能会无限扩张这时你可以定时或者定量去删掉过期的记录我并没有写这个逻辑
class Logger {private HashMapString, Integer msgDict;/** Initialize your data structure here. */public Logger() {msgDict new HashMapString, Integer();}/*** Returns true if the message should be printed in the given timestamp, otherwise returns false.*/public boolean shouldPrintMessage(int timestamp, String message) {//没出现过if (!msgDict.containsKey(message) || timestamp - msgDict.get(message) 10) {//未出现或时间差超过十秒msgDict.put(message, timestamp);return true;} else {//十秒内出现过return false;}}
}