2349. Design a Number Container System

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class NumberContainers {

private final Map<Integer, Integer> indexToNumMap;
private final Map<Integer, TreeSet<Integer>> numToIndexTreeSetMap;

public NumberContainers() {
this.indexToNumMap = new HashMap<>();
this.numToIndexTreeSetMap = new HashMap<>();
}

public void change(int index, int number) {
Integer prevNum = indexToNumMap.put(index, number);
if (prevNum != null) {
numToIndexTreeSetMap.get(prevNum).remove(index);
}

numToIndexTreeSetMap.computeIfAbsent(number, key -> new TreeSet<>())
.add(index);
}

public int find(int number) {
TreeSet<Integer> indexSet = numToIndexTreeSetMap.get(number);
if (indexSet == null || indexSet.isEmpty()) {
return -1;
}

return indexSet.first();
}

}

References

2349. Design a Number Container System