#include<bits/stdc++.h>
using namespace std;
#define fo(i,start,end) for(int i=start;i<end;i++)
class Solution {
public:
int minimumDistance(vector<int>& nums) {
/*Brute Force
Take 3 Pointers (i,j,k)
for each i, move j and k to find 3 elements that are same
o(n^3) time complexity not feasible
*/
// element -> {freq,lastSeenIndex(vector)}
// 1 -> {vector or instances}
//{1,2,1,1,3}
int n = nums.size();
int result = INT_MAX;
unordered_map<int,vector<int>>mp; //element -> freq
fo(it,0,n){
mp[nums[it]].push_back(it); //increment the frequency
if(mp[nums[it]].size() >= 3){
vector<int>& myValues = mp[nums[it]];
int s = myValues.size();
// Grab the 3 MOST RECENT indices (not always 0, 1, and 2)
int first = myValues[s - 3];
int second = myValues[s - 2];
int third = myValues[s - 1];
result = min(result,(abs(first-second) + abs(second-third) + abs(third - first)));
}
}
if(result == INT_MAX) return -1;
else return result;
//if nothing is found
}
};
int main(){
vector<int>arr = {1,2,1,1,3};
Solution s;
int ans = s.minimumDistance(arr);
cout<<ans<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmbyhpLHN0YXJ0LGVuZCkgZm9yKGludCBpPXN0YXJ0O2k8ZW5kO2krKykKY2xhc3MgU29sdXRpb24gewpwdWJsaWM6CiAgICBpbnQgbWluaW11bURpc3RhbmNlKHZlY3RvcjxpbnQ+JiBudW1zKSB7CiAgICAgICAgLypCcnV0ZSBGb3JjZQogICAgICAgIFRha2UgMyBQb2ludGVycyAoaSxqLGspIAogICAgICAgICAgICBmb3IgZWFjaCBpLCBtb3ZlIGogYW5kIGsgdG8gZmluZCAzIGVsZW1lbnRzIHRoYXQgYXJlIHNhbWUKICAgICAgICAgICAgbyhuXjMpIHRpbWUgY29tcGxleGl0eSBub3QgZmVhc2libGUKICAgICAgICAqLwogICAgICAgIC8vIGVsZW1lbnQgLT4ge2ZyZXEsbGFzdFNlZW5JbmRleCh2ZWN0b3IpfQogICAgICAgIC8vIDEgLT4ge3ZlY3RvciBvciBpbnN0YW5jZXN9CiAgICAgICAgLy97MSwyLDEsMSwzfQogICAgICAgIGludCBuID0gbnVtcy5zaXplKCk7CiAgICAgICAgaW50IHJlc3VsdCA9IElOVF9NQVg7CiAgICAgICAgdW5vcmRlcmVkX21hcDxpbnQsdmVjdG9yPGludD4+bXA7IC8vZWxlbWVudCAtPiBmcmVxCiAgICAgICAgZm8oaXQsMCxuKXsKICAgICAgICAgICAgbXBbbnVtc1tpdF1dLnB1c2hfYmFjayhpdCk7IC8vaW5jcmVtZW50IHRoZSBmcmVxdWVuY3kKICAgICAgICAgICAgaWYobXBbbnVtc1tpdF1dLnNpemUoKSA+PSAzKXsKICAgICAgICAgICAgICB2ZWN0b3I8aW50PiYgbXlWYWx1ZXMgPSBtcFtudW1zW2l0XV07CiAgICAgICAgICAgICAgIGludCBzID0gbXlWYWx1ZXMuc2l6ZSgpOwogICAgICAgICAgICAgICAvLyBHcmFiIHRoZSAzIE1PU1QgUkVDRU5UIGluZGljZXMgKG5vdCBhbHdheXMgMCwgMSwgYW5kIDIpCiAgICAgICAgICAgICAgIGludCBmaXJzdCA9IG15VmFsdWVzW3MgLSAzXTsKICAgICAgICAgICAgICAgaW50IHNlY29uZCA9IG15VmFsdWVzW3MgLSAyXTsKICAgICAgICAgICAgICAgaW50IHRoaXJkID0gbXlWYWx1ZXNbcyAtIDFdOwogICAgICAgICAgICAgICAgcmVzdWx0ID0gICBtaW4ocmVzdWx0LChhYnMoZmlyc3Qtc2Vjb25kKSArICBhYnMoc2Vjb25kLXRoaXJkKSArIGFicyh0aGlyZCAtIGZpcnN0KSkpOyAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGlmKHJlc3VsdCA9PSBJTlRfTUFYKSAgcmV0dXJuIC0xOwogICAgICAgIGVsc2UgcmV0dXJuIHJlc3VsdDsKICAgICAgIAogICAgICAgIC8vaWYgbm90aGluZyBpcyBmb3VuZAogICAgfQp9OwppbnQgbWFpbigpewoJdmVjdG9yPGludD5hcnIgPSB7MSwyLDEsMSwzfTsKCVNvbHV0aW9uIHM7CglpbnQgYW5zID0gcy5taW5pbXVtRGlzdGFuY2UoYXJyKTsKCWNvdXQ8PGFuczw8ZW5kbDsKCQp9