kk
This commit is contained in:
29
src/main/java/com/dota/binarySearch/_1146/SnapshotArray.java
Normal file
29
src/main/java/com/dota/binarySearch/_1146/SnapshotArray.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package com.dota.binarySearch._1146;
|
||||
|
||||
import java.util.TreeMap;
|
||||
|
||||
class SnapshotArray {
|
||||
int cnt = 0;
|
||||
TreeMap<Integer, Integer>[] arr ;
|
||||
int n;
|
||||
public SnapshotArray(int length) {
|
||||
arr = new TreeMap[length];
|
||||
n = length;
|
||||
for (int i = 0; i < n; i++) {
|
||||
arr[i] = new TreeMap<>();
|
||||
arr[i].put(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void set(int index, int val) {
|
||||
arr[index].put(cnt, val);
|
||||
}
|
||||
|
||||
public int snap() {
|
||||
return cnt++;
|
||||
}
|
||||
|
||||
public int get(int index, int snap_id) {
|
||||
return arr[index].floorEntry(snap_id).getValue();
|
||||
}
|
||||
}
|
43
src/main/java/com/dota/binarySearch/_981/TimeMap.java
Normal file
43
src/main/java/com/dota/binarySearch/_981/TimeMap.java
Normal file
@@ -0,0 +1,43 @@
|
||||
package com.dota.binarySearch._981;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
class TimeMap {
|
||||
Map<String, List<String>> vmap;
|
||||
Map<String, List<Integer>> imap;
|
||||
public TimeMap() {
|
||||
vmap = new HashMap<>();
|
||||
imap = new HashMap<>();
|
||||
}
|
||||
|
||||
public void set(String key, String value, int timestamp) {
|
||||
vmap.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
|
||||
imap.computeIfAbsent(key, k -> new ArrayList<>()).add(timestamp);
|
||||
}
|
||||
|
||||
public String get(String key, int timestamp) {
|
||||
var vList = vmap.get(key);
|
||||
var iList = imap.get(key);
|
||||
if (vList == null || iList == null) return "";
|
||||
int l= 0, r = iList.size()-1;
|
||||
while (l <= r) {
|
||||
int mid = l + (r - l) / 2;
|
||||
if (iList.get(mid)==timestamp) {
|
||||
return vList.get(mid);
|
||||
}
|
||||
if (iList.get(mid)>timestamp) {
|
||||
r = mid - 1;
|
||||
} else {
|
||||
l = mid + 1;
|
||||
}
|
||||
}
|
||||
if (r < 0) {
|
||||
return "";
|
||||
}
|
||||
return vList.get(r);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user