首页 > 其他分享 >981. 基于时间的键值存储

981. 基于时间的键值存储

时间:2024-09-10 22:36:36浏览次数:1  
标签:存储 right str timestamp self 981 键值 key dct

题目链接 981. 基于时间的键值存储
思路 哈希+二分
题解链接 哈希表+二分
关键点 理解题意
时间复杂度 \(O(\log n)\)
空间复杂度 \(O(n)\)

代码实现:

class TimeMap:

    def __init__(self):
        self.dct = defaultdict(list)

    def set(self, key: str, value: str, timestamp: int) -> None:
        self.dct[key].append((timestamp, value))

    def get(self, key: str, timestamp: int) -> str:
        lst = self.dct[key]
        left, right = -1, len(lst)
        while left + 1 < right:
            mid = (left + right) // 2
            if lst[mid][0] > timestamp:
                right = mid
            else:
                left = mid
        if right == 0:
            return ""
        else:
            return self.dct[key][right - 1][1]
Python-标准库
class TimeMap:

    def __init__(self):
        self.dct = defaultdict(list)

    def set(self, key: str, value: str, timestamp: int) -> None:
        self.dct[key].append((timestamp, value))

    def get(self, key: str, timestamp: int) -> str:
        upper_bound = bisect_right(self.dct[key], timestamp, key=lambda _: _[0])
        if upper_bound == 0:
            return ""
        else:
            return self.dct[key][upper_bound-1][1]

标签:存储,right,str,timestamp,self,981,键值,key,dct
From: https://www.cnblogs.com/WrRan/p/18407378

相关文章

  • 分布式存储节点替换故障硬盘(filestore+LVMcache)
    1.说明此文档操作方法适用于>=V13.2.5ceph版本,部署模式为filestore,将每一块机械盘(LVM卷)对应一个OSD进程,并且journal日志放在ssd加速盘上。2.故障硬盘为SSD缓存盘(加速盘)【思路】缓存盘故障,需先删除机械盘对应的osd,再取消对应机械盘的cache关系,关机换盘后,重新创建cac......
  • Python存储与读写二进制文件
    技术背景一般情况下我们会选择使用明文形式来存储数据,如json、txt、csv等等。如果是需要压缩率较高的存储格式,还可以选择使用hdf5或者npz等格式。还有一种比较紧凑的数据存储格式,就是直接按照二进制格式存储。这种格式下,存储的数据之间没有间隔符,在没有压缩的情况下应该是......
  • 如何查看服务器的磁盘存储容量?
    查看服务器的磁盘存储容量可以通过多种命令行工具来完成,以下是几种常见的方法,适用于大多数基于Linux和Unix的服务器:1.df命令df命令用于显示文件系统的磁盘空间使用情况。显示所有挂载点的磁盘使用情况:df-h这里-h选项表示以可读的格式(例如MB和GB)显示大小。显示特定文件系统的......
  • 视频网站服务器存储多大
    视频网站服务器所需的存储空间大小取决于多种因素,包括视频的数量、视频的分辨率、视频的时长、视频编码格式、备份需求以及网站的其他数据存储需求。以下是一些评估视频网站服务器存储空间需求时需要考虑的关键点:视频文件大小:一个视频文件的大小可以从几MB到几个GB不等。例如,一个高......
  • 20240910_104851 mysql 存储过程 2006班
    修改结束符号delimiter新符号创建一个存储过程要求:查询所有的老师信息只显示id与nameDELIMITER$CREATEPROCEDUREshow1()BEGIN SELECTid,NAMEFROMteacher;END$使用存储过程CALLshow1();查看存储过程的创建语句查看名为p1的存储过程的名称showcreatep......
  • Kubernetes怎么进行NFS动态存储迁移
    环境查看系统环境#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)#uname-aLinuxCentOS7K8SMaster010633.10.0-1160.108.1.el7.x86_64#1SMPThuJan2516:17:31UTC2024x86_64x86_64x86_64GNU/Linux软件环境#kubectlversionClientVersi......
  • Mysql Innodb存储引擎原理—链接如下
    MysqlInnodb存储引擎|ProcessOn免费在线作图,在线流程图,在线思维导图ProcessOn是一个在线协作绘图平台,为用户提供强大、易用的作图工具!支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人......
  • 线性表的链式存储
    线性表的链式存储1链式存储在一个数据结构中,如果一个结点有多个前驱或后继时,使用顺序存储就比较麻烦,即使是线性结构,如果没有足够大的存储空间供使用,也是无法实现的。这时就可以使用链式下存储,在这种存储方式下,除了存放一个结点的信息外,还需附设指针,用指针来体现结点之间的逻辑......
  • Python存储与读写二进制文件
    技术背景一般情况下我们会选择使用明文形式来存储数据,如json、txt、csv等等。如果是需要压缩率较高的存储格式,还可以选择使用hdf5或者npz等格式。还有一种比较紧凑的数据存储格式,就是直接按照二进制格式存储。这种格式下,存储的数据之间没有间隔符,在没有压缩的情况下应该是体积最......
  • 20240904_192638 mysql 填空题 存储过程进阶
    定义一个存储过程的形参,它接收数据,参数名为id,为int类型inidint定义一个存储过程的形参,它返回数据,参数名为name,是varchar(5)类型outnamevarchar(5)定义一个存储过程的形参,它一边接收数据一边返回数据,参数名为num,是int类型inoutnumint声明一个名为info的游标,保存查询teac......