考虑线性的搜索会超时,所以用二叉搜索来解决,代码如下:

 class TimeMap:
def __init__(self):
self.ST = dict() def set(self, key: 'str', value: 'str', timestamp: 'int') -> 'None':
if key in self.ST.keys():
D = self.ST[key]#dict
D.update({timestamp:value})
self.ST.update({key:D})
else:
D = dict()
D.update({timestamp:value})
self.ST.update({key:D}) def get(self, key: 'str', timestamp: 'int') -> 'str':
if key in self.ST.keys():
D = self.ST[key]
V = self.binSearch(timestamp,D)
return V
else:
return '' def binSearch(self,target,D):
times = list(D.keys())
n = len(times)
minval = times[0]
maxval = times[-1]
if target < minval:
return '' if target == minval:
return D[times[0]] if target >= maxval:
return D[times[-1]] left = 0
right = n - 1
while left < right:
mid = (left + right) // 2
if times[mid] == target:
return D[times[mid]]
elif times[mid]<target:
left = mid + 1
elif times[mid]>target:
right = mid - 1
if left == 0:
return D[times[left]]
else:
return D[times[left-1]]

但是这种写法会超时,这应该是代码质量问题,目前没明白是啥原因。

哪位博友知道我的代码的问题,欢迎告知。

参考了一下别人的方案,看到一个线性搜索的解决方案,却可以通过。

 class TimeMap:

     def __init__(self):
"""
Initialize your data structure here.
"""
self.dic = {} def set(self, key: 'str', value: 'str', timestamp: 'int') -> 'None':
if key in self.dic:
self.dic[key].append({'v': value, 't': timestamp})
else:
self.dic[key] = [{'v': value, 't': timestamp}] def get(self, key: 'str', timestamp: 'int') -> 'str':
if key in self.dic:
for kv in reversed(self.dic[key]):
if timestamp >= kv['t']:
return kv['v']
return ""
else:
return ""

leetcode981的更多相关文章

  1. [Swift]LeetCode981. 基于时间的键值存储 | Time Based Key-Value Store

    Create a timebased key-value store class TimeMap, that supports two operations. 1. set(string key, s ...

随机推荐

  1. error ...项目路径 \node_modules\chromedriver: Command failed.

    当你拿到完整的vue项目代码,像 node_modules 整个文件夹不可能提交到svn或者github的, 所以怎么自己安装整个项目所需要的一些依赖呢, 前提是你全局安装了node,才能使用nom命 ...

  2. day 10 函数入门

    def login(): """ """ 执行函数不会报错

  3. XQuery:查询任何可作为 XML 形态呈现的数据,包括数据库

    XQuery 也被称为 XML Query,被设计用来查询 XML 数据. 学习这个 需要知道 HTML / XHTML XML / XML 命名空间 XPath XML 实例文档 我们将在下面的例子 ...

  4. Chromium Settings页面修改

    /********************************************************************** * Chromium Settings页面修改 * 说明 ...

  5. s21day06 python笔记

    s21day06 python笔记 一.昨日内容回顾及补充 回顾 补充 列表独有功能 reverse:反转 v = [1,2,3,4,5] v.reverse() #[5,4,3,2,1] sort: ...

  6. CPU瓶颈分析工具

    性能指标: 一.CPU利用率. 1.用户CPU使用率:用户态CPU使用率(user)和低优先级用户态CPU使用率(nice). 2.系统CPU使用率:说明内核比较忙. 3.等待I/O的CPU使用率(i ...

  7. poj 3264 倍增 ST表

    #include<iostream> #include<cmath> using namespace std; ; int a[maxn]; ]; ]; int quick(i ...

  8. 互联网媒体类型 MIME Type

    参考:https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E5%AA%92%E4%BD%93%E7%B1%BB%E5%9E%8B 互联网 ...

  9. Redis缓存系统(一)Java-Jedis操作Redis,基本操作以及 实现对象保存

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/jiangtao_st/article/details/37699473 源码下载: http://d ...

  10. SUID、SGID、粘滞位

    粘滞位(Stikybit) +t,只有用户自己可以删除自己创建文件,其他用户只能查看,不能删除.        1:创建两个用户  useradd oo                         ...