讨论/《哈希表》 - 日志速率限制器/
《哈希表》 - 日志速率限制器
共 2 个回复
class Logger {
private:
    unordered_map<string, int> hashMap;
public:
    /** Initialize your data structure here. */
    Logger() {

    }
    
    /** 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. */
    bool shouldPrintMessage(int timestamp, string message) {
        if (hashMap.count(message) > 0 && hashMap[message] + 10 > timestamp) {
            return false;
        }
        else {
            hashMap[message] = timestamp;
            return true;
        }
    }
};

/**
 * Your Logger object will be instantiated and called as such:
 * Logger* obj = new Logger();
 * bool param_1 = obj->shouldPrintMessage(timestamp,message);
 */

直接使用哈希映射<message,time stamps>确实又快又好,但这里还是建议结合队列实现垃圾回收机制,否则随着时间的增长哈希表中存储大量过期无效的消息映射,内存爆炸。
使用队列就是在新消息到来时,先按照新消息到来的时间清理队列与哈希表中的过期消息,然后再在清理后的哈希表中判断是否存在重复日志,不存在就更新队列与哈希表,存在直接拒绝此日志。