你需要设计一个能够接收带有时间戳的消息流日志系统。如果某条消息当且仅当在过去 10 秒内没有被打印出来那么它就应该被打印出来。在方法 couldPrintMessage 中给定一条消息 message 和一个时间戳 timestamp以秒为单位如果该消息能够在给定的时间戳内被打印则返回 true否则返回 false。
我们可以使用一个哈希集合来保存最近 10 秒内出现的消息的时间戳。每次调用 couldPrintMessage() 方法时,我们首先检查该消息是否已经在集合中,如果是,则返回 false;否则,将该消息的时间戳加入集合,并移除所有时间戳小于等于当前时间戳减去 10 的消息时间戳。最后返回 true。
以下是 Java 实现的代码:
import java.util.HashSet;
import java.util.Set;
class Logger {
private Set<String> messages;
public Logger() {
messages = new HashSet<>();
}
public boolean couldPrintMessage(String message, int timestamp) {
if (messages.contains(message)) {
return false;
}
messages.add(message);
// 移除所有时间戳小于等于当前时间戳减去 10 的消息时间戳
messages.removeIf(ts -> Integer.parseInt(ts) <= timestamp - 10);
return true;
}
}
在上述代码中,我们假设时间戳是整数类型的。如果时间戳是浮点数类型的,我们需要对代码进行相应的修改。
原文地址: https://www.cveoy.top/t/topic/ivWS 著作权归作者所有。请勿转载和采集!