【leetcode】981. Time Based Key-Value Store
题目如下:
Create a timebased key-value store class
TimeMap, that supports two operations.1.
set(string key, string value, int timestamp)
- Stores the
keyandvalue, along with the giventimestamp.2.
get(string key, int timestamp)
- Returns a value such that
set(key, value, timestamp_prev)was called previously, withtimestamp_prev <= timestamp.- If there are multiple such values, it returns the one with the largest
timestamp_prev.- If there are no values, it returns the empty string (
"").Example 1:
Input: inputs = ["TimeMap","set","get","get","set","get","get"], inputs = [[],["foo","bar",1],["foo",1],["foo",3],
["foo","bar2",4],["foo",4],["foo",5]]
Output: [null,null,"bar","bar",null,"bar2","bar2"]
Explanation:
TimeMap kv;
kv.set("foo", "bar", 1); // store the key "foo" and value "bar" along with timestamp = 1
kv.get("foo", 1); // output "bar"
kv.get("foo", 3); // output "bar" since there is no value corresponding to foo at timestamp 3 and timestamp 2,
//then the only value is at timestamp 1 ie "bar"
kv.set("foo", "bar2", 4);
kv.get("foo", 4); // output "bar2"
kv.get("foo", 5); //output "bar2"Example 2:
Input: inputs = ["TimeMap","set","set","get","get","get","get","get"], inputs = [[],["love","high",10],["love","low",20],
["love",5],["love",10],["love",15],["love",20],["love",25]]
Output: [null,null,null,"","high","high","low","low"]Note:
- All key/value strings are lowercase.
- All key/value strings have length in the range
[1, 100]- The
timestampsfor allTimeMap.setoperations are strictly increasing.1 <= timestamp <= 10^7TimeMap.setandTimeMap.getfunctions will be called a total of120000times (combined) per test case.
解题思路:我用了两个字典,一个是dic_timestamp,以timestamp为key,value作为val;第二个是dic[val] = [timestamp],对于val相同的timestamp以升序排列的方式保存在val对应的list中。由于set操作的timestamp是递增的,所以在set的时候只需要把timestamp插入到div[val]的最后即可;对于get操作,采用二分查找的方法找出最大的小于timestamp的历史timestamp。但是二分查找的方法会timeout,后来我发现get操作的timestamp也是递增的,但是题目没有说明,所以改进代码在get操作之后删除掉小于timestamp的所有历史数据。
代码如下:
class TimeMap(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.dic_timestamp = {}
self.dic = {}
def set(self, key, value, timestamp):
"""
:type key: str
:type value: str
:type timestamp: int
:rtype: None
"""
self.dic[key] = self.dic.setdefault(key,[]) + [timestamp]
self.dic_timestamp[timestamp] = value
def get(self, key, timestamp):
"""
:type key: str
:type timestamp: int
:rtype: str
"""
import bisect
if key not in self.dic or len(self.dic[key]) == 0 or timestamp < self.dic[key][0]:
return ''
elif timestamp >= self.dic[key][-1]:
v = self.dic[key][-1]
self.dic[key] = [self.dic[key][-1]]
return self.dic_timestamp[v]
v = bisect.bisect_left(self.dic[key], timestamp)
inx = bisect.bisect_left(self.dic[key], timestamp)
if inx == len(self.dic[key]) or timestamp != self.dic[key][inx]:
inx -= 1
v = self.dic[key][inx]
self.dic[key] = self.dic[key][inx:]
return self.dic_timestamp[v]
【leetcode】981. Time Based Key-Value Store的更多相关文章
- 【LeetCode】981. Time Based Key-Value Store 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...
- 【LeetCode】数组--合并区间(56)
写在前面 老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的[贪心算法]已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题[数组] 数组( ...
- 【LeetCode】代码模板,刷题必会
目录 二分查找 排序的写法 BFS的写法 DFS的写法 回溯法 树 递归 迭代 前序遍历 中序遍历 后序遍历 构建完全二叉树 并查集 前缀树 图遍历 Dijkstra算法 Floyd-Warshall ...
- 【LeetCode】435. Non-overlapping Intervals 解题报告(Python)
[LeetCode]435. Non-overlapping Intervals 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemi ...
- 【LeetCode】373. Find K Pairs with Smallest Sums 解题报告(Python)
[LeetCode]373. Find K Pairs with Smallest Sums 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/p ...
- 【LeetCode】692. Top K Frequent Words 解题报告(Python)
[LeetCode]692. Top K Frequent Words 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/top ...
- 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)
[LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...
- 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
[LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...
- 【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
随机推荐
- 关于CSS你应该知道的基础知识 - 样式应用篇
上一篇简单总结了一下选择器,如果一个元素被多个选择器选中,元素的样式就会以级联方式被应用到.要搞清最终那个样式被应用到元素上了,首先要明白引用CSS代码的几种方式. CSS代码引用方式 如何应用CSS ...
- php 标准库之ArrayObject
以下为ArrayObject的常用函数: ArrayIterator::current( void ) //返回当前数组元素 ArrayIterator::key(void) //返回当前数组key ...
- h5分线程Worker
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Ti ...
- Python基础学习:operator模块
operator——函数的标准操作 转自:https://blog.csdn.net/zhtysw/article/details/80510113 代码资源:Lib/operator.py oper ...
- Java常用工具——java集合
一.ArrayList package com.imooc.set; import java.util.ArrayList; import java.util.List; public class A ...
- canvas绘制小人开口和闭口
css: <style> body{ text-align: center; } canvas{ background: #ddd; } </style>canvas标签:&l ...
- poj1258Agri-Net(最小生成树)
题目链接:http://poj.org/problem?id=1258 Description Farmer John has been elected mayor of his town! One ...
- error LNK2019: unresolved external symbol __vsnwprintf
老DX SDK,新VS2019问题,编译老项目GG,依赖库加入 legacy_stdio_definitions.lib 解决
- 15.队列Queue的特点以及使用,优先级等
#生产者与消费者模式,模式解释:比如MVC设计模式 ''' 1.队列 (1)特点:先进先出 (2)python2 VS python3 python2:from Queue import queue ...
- 微信小程序这一块(中)
1.if语句跟for循环的使用 <block wx:if="{{n==1}}"> <view>1917</view> </block> ...