首页 > 其他分享 >1797. 设计一个验证系统

1797. 设计一个验证系统

时间:2023-04-07 20:25:47浏览次数:45  
标签:tokenId int AuthenticationManager currentTime 1797 验证 Time 设计 generate

题目链接:1797. 设计一个验证系统

方法:哈希

解题思路

注意:在判断 \(tokenId\) 是否出现过时,使用 \(Time.count(tokenId)\),而不是使用 \(Time[tokenId]\),因为只要使用之后,\(tokenId\) 就会被添加进 \(map\) 中,影响后续计数的结果。

代码

class AuthenticationManager {
private:
    int TimeToLive;
    unordered_map<string, int> Time;
public:
    AuthenticationManager(int timeToLive) {
        TimeToLive = timeToLive;
    }
    
    void generate(string tokenId, int currentTime) {
        Time[tokenId] = currentTime;
    }
    
    void renew(string tokenId, int currentTime) {
        if (!Time.count(tokenId) || Time[tokenId] + TimeToLive <= currentTime) return ;
        Time[tokenId] = currentTime;
    }
    
    int countUnexpiredTokens(int currentTime) {
        int cnt = 0;
        for (auto &t : Time) {
            if (t.second + TimeToLive > currentTime) cnt ++ ;
        }
        return cnt;
    }
};
/**
 * Your AuthenticationManager object will be instantiated and called as such:
 * AuthenticationManager* obj = new AuthenticationManager(timeToLive);
 * obj->generate(tokenId,currentTime);
 * obj->renew(tokenId,currentTime);
 * int param_3 = obj->countUnexpiredTokens(currentTime);
 */

复杂度分析

时间复杂度:构造函数—\(O(1)\),\(generate()\)—\(O(1)\),\(renew()\)—\(O(1)\),\(countUnexpiredTokens()\)—\(O(n)\),\(n\) 为 \(generate()\) 加入的验证码数量。
空间复杂度:\(O(n)\),\(map\) 中元素的个数。

标签:tokenId,int,AuthenticationManager,currentTime,1797,验证,Time,设计,generate
From: https://www.cnblogs.com/lxycoding/p/17297231.html

相关文章

  • 可编程逻辑器件和数字系统设计初步
    可编程逻辑器件传统通用逻辑器件:逻辑规模小、占用印刷板面积大、功耗大、可靠性低专用集成电路ASIC(ApplicationSpecificIntegratedCircuit),针对特定用途可编程逻辑器件PLD(ProgrammableLogicDevice),属于ASIC:可由设计者自己完成逻辑功能,系统集成度高、可靠性高、设计过程灵活......
  • 概念:四种基于模型的嵌入式软件开发、测试与验证方法
    ​嵌入式软件(如航空电子和汽车系统)的设计、开发、测试和验证正变得越来越复杂。传统的文档驱动式环境中,一旦开发人员之间缺乏协调,软件程序生命周期的质量和成本就会受到严重影响,显然已经无法应对日益复杂的嵌入式软件生产。正确使用基于模型的设计(Model-BasedDesign,以下简称MBD......
  • MySQL新身份验证插件caching_sha2_password
     用sequelpro工具登录,连接失败~!“Authenticationplugin'caching_sha2_password'cannotbeloaded”失败原因:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password解决办法:把mysql用户登录密码加密规则还原成mysql_nati......
  • 如何设计高效的基准场景?揭秘大厂的实战策略!
    RESAR性能工程中,场景分为基准、容量、稳定性、异常。每类场景对应不同目标。基准场景是为找到系统中明显配置及软件Bug,也为容量场景提供可对比的基准数据。基准场景要有确定结论。线程数应该如何确定,压力线程的连续递增的重要性,以及如何将之前所讲的分析思路应用在具体的分析案例中......
  • SpringSecurity实现权限系统设计
    RBAC权限分析RBAC全称为基于角色的权限控制,本段将会从什么是RBAC,模型分类,什么是权限,用户组的使用,实例分析等几个方面阐述RBAC思维导图绘制思维导图如下什么是RBACRBAC全称为用户角色权限控制,通过角色关联用户,角色关联权限,这种方式,间阶的赋予用户的权限,如下图所示对于通常的系统而......
  • 服务 API 设计之 ——API 参数规范
    【强制】字段名称用小驼峰风格【强制】ServiceAPI返回值必须使用Response包装ServiceAPI返回值强制要求进行通用包装,例如:Response。Response的作用:统一方法表示API调用是否成功API调用失败时,统一格式反馈错误Code,错误Message统一的Response易于调用方经验复用,框架集......
  • 你不会还不知道JavaScript常用的8大设计模式?
    JavaScript常用的8大设计模式有工厂模式:工厂模式是一种创建对象的模式,可以通过一个共同的接口创建不同类型的对象,隐藏了对象的创建过程。单例模式:单例模式是一种只允许实例化一次的对象模式,可以通过一个全局访问点来访问它。建造者模式:建造者模式是一种创建复杂对象的模式,通......
  • Python 之生成验证码
    一、代码importrandomfromioimportBytesIOfromPILimportImage,ImageDraw,ImageFont,ImageFilterclassCaptcha:def__init__(self,width,height,code_num=4,code_type=1,font_size=24,is_blur=True,font='Arial.ttf',x_......
  • MIPI/LVDS/PCIE/HDMI 设计规范
          ......
  • Python selenium过图片滑块验证
    计算滑块移动距离defget_distance(image1,image2):'''拿到滑动验证码需要移动的距离:paramimage1:没有缺口的图片对象:paramimage2:带缺口的图片对象:return:需要移动的距离'''#print('size',image1.size)threshold=5......