Time Based key-Value Store
Design a time-based key-value data structure that can store multiple values for the same key at different time stamps and retrieve the key's value at a certain timestamp.
Implement the TimeMap class:
TimeMap()Initializes the object of the data structure.void set(String key, String value, int timestamp)Stores the keykeywith the valuevalueat the given timetimestamp.String get(String key, int timestamp)Returns a value such thatsetwas called previously, withtimestamp_prev <= timestamp. If there are multiple such values, it returns the value associated with the largesttimestamp_prev. If there are no values, it returns"".
Example 1:
Input ["TimeMap", "set", "get", "get", "set", "get", "get"]
[[], ["foo", "bar", 1], ["foo", 1], ["foo", 3], ["foo", "bar2", 4], ["foo", 4], ["foo", 5]]
Output
[null, null, "bar", "bar", null, "bar2", "bar2"]
Explanation
TimeMap timeMap = new TimeMap();
timeMap.set("foo", "bar", 1); // store the key "foo" and value "bar" along with timestamp = 1.
timeMap.get("foo", 1); // return "bar"
timeMap.get("foo", 3); // return "bar", since there is no value corresponding to foo at timestamp 3 and timestamp 2, then the only value is at timestamp 1 is "bar".
timeMap.set("foo", "bar2", 4); // store the key "foo" and value "bar2" along with timestamp = 4.
timeMap.get("foo", 4); // return "bar2"
timeMap.get("foo", 5); // return "bar2"
Constraints:
1 <= key.length, value.length <= 100keyandvalueconsist of lowercase English letters and digits.1 <= timestamp <= 107- All the timestamps
timestampofsetare strictly increasing. - At most
2 * 105calls will be made tosetandget.
Solution
To look for the location pos of the timestamp entry, we must find the timestamp pair less than or equal to timestamp.
Hence we repeatly update pos to mid, if the timestamp at histories[mid] is less than or equal to the given timestamp
(histories[mid][0] <= timestamp), to find the greatest timestamp less than or equal to timestamp.
In the binary search loop, we will continue to find the desired timestamp on the right side of the loop if histories[mid][0] <= timestamp,
and search the left side otherwise.

Implementation
class TimeMap(object):
def __init__(self):
self.histories = dict()
def set(self, key, value, timestamp):
if not key in self.histories:
self.histories[key] = []
self.histories[key].append([timestamp, value])
def get(self, key, timestamp):
if not key in self.histories: return ""
left, right, pos = 0, len(self.histories[key])-1, -1
while left <= right:
mid = (left+right) // 2
if self.histories[key][mid][0] <= timestamp:
left = mid + 1
pos = mid
else:
right = mid - 1
if pos == -1: return ""
return self.histories[key][pos][1]
Intuition
We want to only store the changes of values for each key chronologically in its own array.
We use a map of string to array histories such that histories[key] is an array that stores pairs (timestamp, value)
indicating that key stores value at timestamp.
For the get function, we want to find the value stored in key at timestamp. In histories[key],
it is the entry with the greatest timestamp less or equal to the given timestamp.
Ready to land your dream job?
Unlock your dream job with a 5-minute evaluator for a personalized learning plan!
Start EvaluatorWhat are the most two important steps in writing a depth first search function? (Select 2)
Recommended Readings
Coding Interview Patterns Your Personal Dijkstra's Algorithm to Landing Your Dream Job The goal of AlgoMonster is to help you get a job in the shortest amount of time possible in a data driven way We compiled datasets of tech interview problems and broke them down by patterns This way
Recursion If you prefer videos here's a video that explains recursion in a fun and easy way Recursion is one of the most important concepts in computer science Simply speaking recursion is the process of a function calling itself Using a real life analogy imagine a scenario where you invite your friends to lunch https assets algo monster recursion jpg You first call Ben and ask him
Runtime Overview When learning about algorithms and data structures you'll frequently encounter the term time complexity This concept is fundamental in computer science and offers insights into how long an algorithm takes to complete given a certain input size What is Time Complexity Time complexity represents the amount of time
Want a Structured Path to Master System Design Too? Don’t Miss This!