weekly contest 121的 基於時間的鍵值儲存:
建立乙個基於時間的鍵值儲存類本題解題前可以去了解一下時序資料庫,本題其實就是實現乙個簡單的時序資料庫。同時實現也是很簡單:timemap
,它支援下面兩個操作:
set(string key, string value, int timestamp)
get(string key, int timestamp)
示例1:
示例2:輸入: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"
輸入: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]]
輸出:[null,null,null,"","high","high","low","low"]
所有的鍵/值字串都是小寫的。
所有的鍵/值字串長度都在
[1, 100]
範圍內。所有 timemap.set 操作中的時間戳
timestamps
都是嚴格遞增的。
1 <= timestamp <= 10^7
timemap.set
和timemap.get
函式在每個測試用例中將(組合)呼叫總計 120000 次。
首先定義乙個valuemap
,該map
以timestamp
為key
,以value
為value
,這樣就能夠記錄下不同timestamp
下的value
。
然後再定義乙個map
,該map
以key
為key
,以valuemap
為value
。
需要注意valuemap
我選擇的是用treemap
,其提供firstkey()
能夠快速找到第乙個元素,而floorentry()
則會返回與小於或等於給定鍵的最大鍵關聯的鍵值對映,如果沒有這樣的鍵,則返回null
。
/**
* 981. 基於時間的鍵值儲存
* @author rjh
* create at 2019-01-27
*/public class timemap
public void set(string key, string value, int timestamp) else
}public string get(string key, int timestamp) elseelse
}}else
}}
981 基於時間的鍵值儲存
設計乙個基於時間的鍵值資料結構,該結構可以在不同時間戳儲存對應同乙個鍵的多個值,並針對特定時間戳檢索鍵對應的值。實現 timemap 類 timemap 初始化資料結構物件 void set string key,string value,int timestamp 儲存鍵 key 值 value,...
Leetcode 981 基於時間的鍵值儲存
建立乙個基於時間的鍵值儲存類timamap,它支援下面兩個操作 1 set string key,string value,int timestamp 2 get string key,int timestamp 示例1 輸入 inputs timemap set get get set get g...
SortedList 儲存鍵值對的集合
創 建乙個sortedlist機會用於儲存基於鍵上值排序的鍵值對。可以通過如下屬性獲得sortedlist的唯讀的keys和 values值。public virtual icollection keys public virtual icollection values 下面是sortedlist...