diff --git a/src/main/java/com/cool/ling_cha_mount/binary_search/Num981.java b/src/main/java/com/cool/ling_cha_mount/binary_search/Num981.java new file mode 100644 index 0000000..cc3fcef --- /dev/null +++ b/src/main/java/com/cool/ling_cha_mount/binary_search/Num981.java @@ -0,0 +1,53 @@ +package com.cool.ling_cha_mount.binary_search; + +import java.util.*; +import java.util.stream.Collectors; + +public class Num981 { + + +} + +class TimeMap { + + private final Map> timeMap; + private final Map> valueMap; + + public TimeMap() { + timeMap = new HashMap<>(); + valueMap = new HashMap<>(); + } + + public void set(String key, String value, int timestamp) { + timeMap.computeIfAbsent(key, e -> new ArrayList<>()).add(timestamp); + valueMap.computeIfAbsent(key, e -> new ArrayList<>()).add(value); + } + + public String get(String key, int timestamp) { + if (!timeMap.containsKey(key)) { + return ""; + } + List timeList = timeMap.get(key); + List valueList = valueMap.get(key); + int index = binarySearch(timeList, timestamp + 1) - 1; + if (index < 0) { + return ""; + } + return valueList.get(index); + + } + + private int binarySearch(List list, int target) { + int left = -1; + int right = list.size(); + while (left + 1 < right) { + int mid = (left + right) >>> 1; + if (list.get(mid) >= target) { + right = mid; + } else { + left = mid; + } + } + return right; + } +}