981. Time Based Key-Value Store
First solution -> HashMap + list time complexity of set() ---- O(1) best case, O(n) worst case, because ArrayList needs to be rearranged in case internal array is overflowed. time complexity of get() ---- O(log n) since we perform binary search
Second solution -> HashMap + TreeMap time complexity of set() ---- O(log k) , because we're updating a TreeMap with k number of timestamps. time complexity of get() ---- O(log n) , because tree map internally uses binary search tree for sorting out the elements.
ask timestamp is ordered, increasing?
for the question, so we want the value ( timestamp <= query input's timestamp, closest one)
so can leverage treemap's floorKey() (treeMap<timestmap, value> or
2. use BS to find the closest value (timestamp <= query input's timestamp)
HashMap + list , Binary search (append to list set() is better! O(1))
from constraint:
All the timestamps
timestampofsetare strictly increasing.
so in actually, we can use bs in List
protected String binarySearch(List<Data> list, int time) {
int low = 0, high = list.size() - 1;
while (low +1 < high) {
int mid = (low + high) >> 1;
if (list.get(mid).time <= time) {
low = mid;
} else {
high = mid;
}
}
// we want closest time, so compare end first
if (list.get(high).time <= time) {
return list.get(high).val;
}
if (list.get(low).time <= time) {
return list.get(low).val;
}
return "";
}T: set: O(1), get: O(1) + O(logn), n is list len
S: O(m*n), m - hashmap size, n - each list size
HashMap + TreeMap
T: set: O(logn), get: O(1) + O(logn), n is treemap size
S: O(m*n), m - hashmap size, n - each treemap size
Last updated
Was this helpful?