981. Time Based Key-Value Store

14 阅读1分钟

image.png

Solution

image.png

image.png

class TimeMap {
    Map<String, ArrayList<Pair<Integer, String>>> map;
    public TimeMap() {
        // <Key, [Time, Value]>
        map = new HashMap<String, ArrayList<Pair<Integer, String>>>();
    }
    
    public void set(String key, String value, int timestamp) {
        if (!map.containsKey(key)) {
            map.put(key, new ArrayList<Pair<Integer, String>>());
        }
        map.get(key).add(new Pair(timestamp, value));
    }
    
    public String get(String key, int timestamp) {
        if (!map.containsKey(key)) {
            return "";
        } 
        int left = 0, right = map.get(key).size() - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (map.get(key).get(mid).getKey() <= timestamp) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }

        if (right == -1) {
            return "";
        } else  {
            return map.get(key).get(right).getValue();
        }
    }
}