359:日志速率限制器
This commit is contained in:
parent
5ff3ff1a86
commit
2f48a2d12f
94
src/main/java/leetcode/editor/cn/LoggerRateLimiter.java
Normal file
94
src/main/java/leetcode/editor/cn/LoggerRateLimiter.java
Normal file
@ -0,0 +1,94 @@
|
||||
//请你设计一个日志系统,可以流式接收消息以及它的时间戳。每条 不重复 的消息最多只能每 10 秒打印一次。也就是说,如果在时间戳 t 打印某条消息,那么相同内
|
||||
//容的消息直到时间戳变为 t + 10 之前都不会被打印。
|
||||
//
|
||||
// 所有消息都按时间顺序发送。多条消息可能到达同一时间戳。
|
||||
//
|
||||
// 实现 Logger 类:
|
||||
//
|
||||
//
|
||||
// Logger() 初始化 logger 对象
|
||||
// bool shouldPrintMessage(int timestamp, string message) 如果这条消息 message 在给定的时间戳
|
||||
// timestamp 应该被打印出来,则返回 true ,否则请返回 false 。
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 示例:
|
||||
//
|
||||
//
|
||||
//输入:
|
||||
//["Logger", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage",
|
||||
//"shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage"]
|
||||
//[[], [1, "foo"], [2, "bar"], [3, "foo"], [8, "bar"], [10, "foo"], [11, "foo"]]
|
||||
//
|
||||
//输出:
|
||||
//[null, true, true, false, false, false, true]
|
||||
//
|
||||
//解释:
|
||||
//Logger logger = new Logger();
|
||||
//logger.shouldPrintMessage(1, "foo"); // 返回 true ,下一次 "foo" 可以打印的时间戳是 1 + 10 =
|
||||
// 11
|
||||
//logger.shouldPrintMessage(2, "bar"); // 返回 true ,下一次 "bar" 可以打印的时间戳是 2 + 10 =
|
||||
// 12
|
||||
//logger.shouldPrintMessage(3, "foo"); // 3 < 11 ,返回 false
|
||||
//logger.shouldPrintMessage(8, "bar"); // 8 < 12 ,返回 false
|
||||
//logger.shouldPrintMessage(10, "foo"); // 10 < 11 ,返回 false
|
||||
//logger.shouldPrintMessage(11, "foo"); // 11 >= 11 ,返回 true ,下一次 "foo" 可以打印的时间戳
|
||||
//是 11 + 10 = 21
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// 提示:
|
||||
//
|
||||
//
|
||||
// 0 <= timestamp <= 10⁹
|
||||
// 每个 timestamp 都将按非递减顺序(时间顺序)传递
|
||||
// 1 <= message.length <= 30
|
||||
// 最多调用 10⁴ 次 shouldPrintMessage 方法
|
||||
//
|
||||
// Related Topics 设计 哈希表 👍 62 👎 0
|
||||
|
||||
package leetcode.editor.cn;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
//359:日志速率限制器
|
||||
public class LoggerRateLimiter {
|
||||
public static void main(String[] args) {
|
||||
//Solution solution = new LoggerRateLimiter().new Solution();
|
||||
// TO TEST
|
||||
}
|
||||
|
||||
//leetcode submit region begin(Prohibit modification and deletion)
|
||||
class Logger {
|
||||
Map<String,Integer> map;
|
||||
|
||||
public Logger() {
|
||||
map = new HashMap<>();
|
||||
}
|
||||
|
||||
public boolean shouldPrintMessage(int timestamp, String message) {
|
||||
if(map.containsKey(message)){
|
||||
if(map.get(message)+10<=timestamp){
|
||||
map.put(message,timestamp);
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}else{
|
||||
map.put(message,timestamp);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Your Logger object will be instantiated and called as such:
|
||||
* Logger obj = new Logger();
|
||||
* boolean param_1 = obj.shouldPrintMessage(timestamp,message);
|
||||
*/
|
||||
//leetcode submit region end(Prohibit modification and deletion)
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
<p>请你设计一个日志系统,可以流式接收消息以及它的时间戳。每条 <strong>不重复</strong> 的消息最多只能每 10 秒打印一次。也就是说,如果在时间戳 <code>t</code> 打印某条消息,那么相同内容的消息直到时间戳变为 <code>t + 10</code> 之前都不会被打印。</p>
|
||||
|
||||
<p>所有消息都按时间顺序发送。多条消息可能到达同一时间戳。</p>
|
||||
|
||||
<p>实现 <code>Logger</code> 类:</p>
|
||||
|
||||
<ul>
|
||||
<li><code>Logger()</code> 初始化 <code>logger</code> 对象</li>
|
||||
<li><code>bool shouldPrintMessage(int timestamp, string message)</code> 如果这条消息 <code>message</code> 在给定的时间戳 <code>timestamp</code> 应该被打印出来,则返回 <code>true</code> ,否则请返回 <code>false</code> 。</li>
|
||||
</ul>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例:</strong></p>
|
||||
|
||||
<pre>
|
||||
<strong>输入:</strong>
|
||||
["Logger", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage", "shouldPrintMessage"]
|
||||
[[], [1, "foo"], [2, "bar"], [3, "foo"], [8, "bar"], [10, "foo"], [11, "foo"]]
|
||||
<strong>输出:</strong>
|
||||
[null, true, true, false, false, false, true]
|
||||
|
||||
<strong>解释:</strong>
|
||||
Logger logger = new Logger();
|
||||
logger.shouldPrintMessage(1, "foo"); // 返回 true ,下一次 "foo" 可以打印的时间戳是 1 + 10 = 11
|
||||
logger.shouldPrintMessage(2, "bar"); // 返回 true ,下一次 "bar" 可以打印的时间戳是 2 + 10 = 12
|
||||
logger.shouldPrintMessage(3, "foo"); // 3 < 11 ,返回 false
|
||||
logger.shouldPrintMessage(8, "bar"); // 8 < 12 ,返回 false
|
||||
logger.shouldPrintMessage(10, "foo"); // 10 < 11 ,返回 false
|
||||
logger.shouldPrintMessage(11, "foo"); // 11 >= 11 ,返回 true ,下一次 "foo" 可以打印的时间戳是 11 + 10 = 21
|
||||
</pre>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>提示:</strong></p>
|
||||
|
||||
<ul>
|
||||
<li><code>0 <= timestamp <= 10<sup>9</sup></code></li>
|
||||
<li>每个 <code>timestamp</code> 都将按非递减顺序(时间顺序)传递</li>
|
||||
<li><code>1 <= message.length <= 30</code></li>
|
||||
<li>最多调用 <code>10<sup>4</sup></code> 次 <code>shouldPrintMessage</code> 方法</li>
|
||||
</ul>
|
||||
<div><div>Related Topics</div><div><li>设计</li><li>哈希表</li></div></div><br><div><li>👍 62</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user