#include <iostream>
#include <unordered_map>
int GetMaxDistance(int arr[], int size) {
std::unordered_map<int, int> map;
int maximumDistance = 0;
for (int i = 0; i < size; i++) {
if (map.find(arr[i]) == map.end()) {
map[arr[i]] = i;
std::cout << "map[arr[i]]=" << map[arr[i]] << " arr[i]=" << arr[i] << " i=" << i << "\n";
}
else {
maximumDistance = std::max(maximumDistance, i - map[arr[i]]);
std::cout << "map[arr[i]]=" << map[arr[i]] << " i - map[arr[i]]=" << i - map[arr[i]] << " i=" << i << "\n";
}
}
return maximumDistance;
}
int main()
{
int arr[] = {7, 1, 4, 3, 1, 5, 3, 4, 9, 1, 3};
int size = sizeof(arr)/sizeof(arr[0]);
std::cout << GetMaxDistance(arr, size);
}
/*
run:
map[arr[i]]=0 arr[i]=7 i=0
map[arr[i]]=1 arr[i]=1 i=1
map[arr[i]]=2 arr[i]=4 i=2
map[arr[i]]=3 arr[i]=3 i=3
map[arr[i]]=1 i - map[arr[i]]=3 i=4
map[arr[i]]=5 arr[i]=5 i=5
map[arr[i]]=3 i - map[arr[i]]=3 i=6
map[arr[i]]=2 i - map[arr[i]]=5 i=7
map[arr[i]]=8 arr[i]=9 i=8
map[arr[i]]=1 i - map[arr[i]]=8 i=9
map[arr[i]]=3 i - map[arr[i]]=7 i=10
8
*/