构建一个带有时间版本的KV存储器。即每次保存的时候会保存当前的时间,查询的时候给出一个时间,要求找到先于该时间的最新的key对应的value。

思路:利用TreeMap可以自动排序的特点,减少自己排序的麻烦。
用TreeMap.floorKey()可以迅速返回小于当前时间的最大时间。
时间复杂度:插入O(1),查找O(logN);
空间复杂度:O(N)。
1import java.util.HashMap;
2import java.util.TreeMap;
3
4/**
5 * @author lxn
6 * @description 981. Time Based Key-Value Store
7 * @create 2020-03-12 23:22
8 */
9public class Algorithm981 {
10 public static void main(String[] args) {
11 TimeMap obj = new TimeMap();
12 obj.set("foo","bar",1);
13 String param_2 = obj.get("foo", 1);
14
15 }
16}
17
18class TimeMap {
19
20 /** Initialize your data structure here. */
21 HashMap<String, TreeMap<Integer, String>> map;
22 public TimeMap() {
23 map = new HashMap();
24 }
25
26 public void set(String key, String value, int timestamp) {
27 map.computeIfAbsent(key, k -> new TreeMap()).put(timestamp, value);// {"foo", {"1", "bar"}}
28 }
29
30 public String get(String key, int timestamp) {
31 if(!map.containsKey(key)) return "";
32 TreeMap<Integer, String> tree = map.get(key); // {"1", "bar"}
33 // TreeMap.floorKey: 返回小于等于给定键的最大键;如果不存在这样的键,则返回null。
34 Integer time = tree.floorKey(timestamp);
35 return time != null ? tree.get(time) : "";
36 }
37}
文章转载自程序媛的梦想,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




