leetcode/0981.Time-Based-Key-Value-Store/README.md
Create a timebased key-value store class TimeMap, that supports two operations.
1. set(string key, string value, int timestamp)
key and value, along with the given timestamp.2. get(string key, int timestamp)
set(key, value, timestamp_prev) was called previously, with timestamp_prev <= timestamp.timestamp_prev."").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:
[1, 100]timestamps for all TimeMap.set operations are strictly increasing.1 <= timestamp <= 10^7TimeMap.set and TimeMap.get functions will be called a total of 120000 times (combined) per test case.创建一个基于时间的键值存储类 TimeMap,它支持下面两个操作:
提示:
kv 存储。set() 操作里面会会包含一个时间戳。get() 操作的时候查找时间戳小于等于 timestamp 的 key 对应的 value,如果有多个解,输出满足条件的最大时间戳对应的 value 值。map 存储 kv 数据,key 对应的就是 key,value 对应一个结构体,里面包含 value 和 timestamp。执行 get() 操作的时候,先取出 key 对应的结构体数组,然后在这个数组里面根据 timestamp 进行二分搜索。由于题意是要找小于等于 timestamp 的最大 timestamp ,这会有很多满足条件的解,变换一下,先找 > timestamp 的最小解,然后下标减一即是满足题意的最大解。TimeMap.set 操作中的 timestamp 是严格递增的”。所以在 map 中存储 value 结构体的时候,不需要排序了,天然有序。