|
| 1 | +classNumberContainers { |
| 2 | + |
| 3 | +privatefinalMap<Integer,TreeSet<Integer>>numberToIndex; |
| 4 | +privatefinalMap<Integer,Integer>indexToNumber; |
| 5 | + |
| 6 | +publicNumberContainers() { |
| 7 | +this.numberToIndex =newHashMap<>(); |
| 8 | +this.indexToNumber =newHashMap<>(); |
| 9 | + } |
| 10 | + |
| 11 | +publicvoidchange(intindex,intnumber) { |
| 12 | +if (indexToNumber.containsKey(index)) { |
| 13 | +intprevNumber =indexToNumber.get(index); |
| 14 | +numberToIndex.get(prevNumber).remove(index); |
| 15 | + } |
| 16 | +indexToNumber.put(index,number); |
| 17 | +numberToIndex.computeIfAbsent(number,k ->newTreeSet<>()).add(index); |
| 18 | + } |
| 19 | + |
| 20 | +publicintfind(intnumber) { |
| 21 | +TreeSet<Integer>indices =numberToIndex.getOrDefault(number,newTreeSet<>()); |
| 22 | +if (indices.isEmpty()) { |
| 23 | +return -1; |
| 24 | + } |
| 25 | +returnindices.first(); |
| 26 | + } |
| 27 | +} |
| 28 | + |
| 29 | +/** |
| 30 | + * Your NumberContainers object will be instantiated and called as such: |
| 31 | + * NumberContainers obj = new NumberContainers(); |
| 32 | + * obj.change(index,number); |
| 33 | + * int param_2 = obj.find(number); |
| 34 | + */ |