創建一個基于時間的鍵值存儲類 TimeMap,它支持下面兩個操作:
- set(string key, string value, int timestamp)
存儲鍵 key、值 value,以及給定的時間戳 timestamp。
2. get(string key, int timestamp)
返回先前調用 set(key, value, timestamp_prev) 所存儲的值,其中 timestamp_prev <= timestamp。
如果有多個這樣的值,則返回對應最大的 timestamp_prev 的那個值。
如果沒有值,則返回空字符串("")。
示例 1:
輸入:inputs = [“TimeMap”,“set”,“get”,“get”,“set”,“get”,“get”], inputs = [[],[“foo”,“bar”,1],[“foo”,1],[“foo”,3],[“foo”,“bar2”,4],[“foo”,4],[“foo”,5]]
輸出:[null,null,“bar”,“bar”,null,“bar2”,“bar2”]
解釋:
TimeMap kv;
kv.set(“foo”, “bar”, 1); // 存儲鍵 “foo” 和值 “bar” 以及時間戳 timestamp = 1
kv.get(“foo”, 1); // 輸出 “bar”
kv.get(“foo”, 3); // 輸出 “bar” 因為在時間戳 3 和時間戳 2 處沒有對應 “foo” 的值,所以唯一的值位于時間戳 1 處(即 “bar”)
kv.set(“foo”, “bar2”, 4);
kv.get(“foo”, 4); // 輸出 “bar2”
kv.get(“foo”, 5); // 輸出 “bar2”
代碼
class TimeMap {Map<String,TreeMap<Integer,String>> map;/** Initialize your data structure here. */public TimeMap() {map=new HashMap<>();}public void set(String key, String value, int timestamp) {if(!map.containsKey(key))map.put(key,new TreeMap<>());map.get(key).put(timestamp,value);//存儲key ->(timestamp->value)}public String get(String key, int timestamp) {if( map.get(key).floorEntry(timestamp)==null) return "";//沒有小于或等于目標的keyreturn map.get(key).floorEntry(timestamp).getValue();}}/*** Your TimeMap object will be instantiated and called as such:* TimeMap obj = new TimeMap();* obj.set(key,value,timestamp);* String param_2 = obj.get(key,timestamp);*/