[Leetcode]981. Time Based Key-Value Store
3987 ワード
# [[Leetcode]981. Time Based Key-Value Store](https://leetcode.com/problems/time-based-key-value-store/)
-難易度:Medium#Description
Create a timebased key-value store class
1. Stores the
2. Returns a value such that If there are multiple such values, it returns the one with the largest If there are no values, it returns the empty string (
Example 1:
Example 2:
Note: All key/value strings are lowercase. All key/value strings have length in the range The
私のコード``python
import heapq
class TimeMap: def __init__(self): """ Initialize your data structure here. """ self.Stores = {}
def set(self, key: str, value: str, timestamp: int) -> None: tmp = self.Stores.get(key, []) heapq.heappush(tmp,[timestamp, value]) self.Stores[key] = tmp
def get(self, key: str, timestamp: int) -> str: nums = self.Stores.get(key, [])
if len(nums) == 0 or nums[0][0]>timestamp: return ""
left = 0 right = len(nums) - 1 mid = (left + right)//2 while (left < right): if nums[mid][0] == timestamp or ( mid < len(nums) - 1 and nums[mid][0] < timestamp and nums[mid + 1][0] > timestamp): return nums[mid][1] if nums[mid][0] < timestamp: left = mid + 1 else: right = mid - 1 mid = (left + right)//2 if mid == len(nums) - 1 and nums[mid][0] <= timestamp: return nums[mid][1] return ""
```
-難易度:Medium#Description
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^7
TimeMap.set
and TimeMap.get
functions will be called a total of 120000
times (combined) per test case. 私のコード``python
import heapq
class TimeMap: def __init__(self): """ Initialize your data structure here. """ self.Stores = {}
def set(self, key: str, value: str, timestamp: int) -> None: tmp = self.Stores.get(key, []) heapq.heappush(tmp,[timestamp, value]) self.Stores[key] = tmp
def get(self, key: str, timestamp: int) -> str: nums = self.Stores.get(key, [])
if len(nums) == 0 or nums[0][0]>timestamp: return ""
left = 0 right = len(nums) - 1 mid = (left + right)//2 while (left < right): if nums[mid][0] == timestamp or ( mid < len(nums) - 1 and nums[mid][0] < timestamp and nums[mid + 1][0] > timestamp): return nums[mid][1] if nums[mid][0] < timestamp: left = mid + 1 else: right = mid - 1 mid = (left + right)//2 if mid == len(nums) - 1 and nums[mid][0] <= timestamp: return nums[mid][1] return ""
```