How to find the maximum distance between two occurrences of same number in array with C++

1 Answer

0 votes
#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

*/

 



answered Dec 17, 2022 by avibootz
edited Dec 17, 2022 by avibootz
...