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?

  1. 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 timestamp of set are 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?