LeetMotion
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.set(String key, String value, int timestamp) Stores the key key with the value value at the given time timestamp.get(String key, int timestamp) Returns a value such that set was called previously, with timestamp_prev <= timestamp. If there are multiple such values, it returns the value associated with the largest timestamp_prev. If there are no values, it returns "".1 <= key.length, value.length <= 100key and value consist of lowercase English letters and digits.1 <= timestamp <= 10⁷timestamp of set are strictly increasing.2 * 10⁵ calls will be made to set and get.Because the problem guarantees that set calls have strictly increasing timestamps, any array we append to will automatically be sorted by timestamp! Thus, we can store values in a dictionary mapping keys to lists of [value, timestamp].
For the get() operation, we retrieve this array and run binary search to find the greatest timestamp that is less than or equal to the target timestamp.
key.l = 0, r = len(values) - 1.m = (l + r) // 2. If values[m].timestamp <= target, since the value is valid, we capture it in res. We then search to the right l = m + 1 to try and find an even closer timestamp!values[m].timestamp > target, it's invalid (too far in the future). We must search to the left: r = m - 1.
Discussion
…