Without sorted set
\ntype NumberContainers struct {\n\tindexMap    map[int]int\n\tnumberMap   map[int]map[int]struct{}\n\tminIndexMap map[int]int\n}\n\nfunc Constructor() NumberCo
```\ntype NumberContainers struct {\n\tindexMap    map[int]int\n\tnumberMap   map[int]map[int]struct{}\n\tminIndexMap map[int]int\n}\n\nfunc Constructor() NumberContainers {\n\treturn NumberContainers{\n\t\tindexMap:    make(map[int]int),\n\t\tnumberMap:   make(map[int]map[int]struct{}),\n\t\tminIndexMap: make(map[int]int),\n\t}\n}\n\nfunc (this *NumberContainers) Change(index int, number int) {\n\toldNumber, exist := this.indexMap[index]\n\tthis.indexMap[index] = number\n\n\tindexSet, ok := this.numberMap[number]\n\n\tif !ok {\n\t\tthis.minIndexMap[number] = index\n\t\tindexSet = make(map[int]struct{})\n\t} else if index < this.minIndexMap[number] {\n\t\tthis.minIndexMap[number] = index\n\t}\n\n\tindexSet[index] = struct{}{}\n\tthis.numberMap[number] = indexSet\n\n\tif exist && oldNumber != number {\n\t\tdelete(this.numberMap[oldNumber], index)\n\n\t\tif len(this.numberMap[oldNumber]) == 0 {\n\t\t\tdelete(this.numberMap, oldNumber)\n\t\t\treturn\n\t\t}\n\n\t\tif this.minIndexMap[oldNumber] == index {\n\t\t\tminIndex := 1000000000\n\n\t\t\tfor idx := range this.numberMap[oldNumber] {\n\t\t\t\tif idx < minIndex {\n\t\t\t\t\tminIndex = idx\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.minIndexMap[oldNumber] = minIndex\n\t\t}\n\t}\n}\n\nfunc (this *NumberContainers) Find(number int) int {\n\t_, ok := this.numberMap[number]\n\n\tif !ok {\n\t\treturn -1\n\t}\n\n\treturn this.minIndexMap[number]\n}\n\n```
['Go']