Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j]and the difference between i and j is at most k.
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
map<int, vector<int> > m = map<int, vector<int> >();
for(int i=0;i<nums.size();i++){
if(m.count(nums[i]) <= 0){
vector<int> v = vector<int>();
v.push_back(i);
m[nums[i]] = v;
}else{
m[nums[i]].push_back(i);
}
}
for (auto& x: m) {
vector<int> &v = x.second;
if(v.size() <= 1) continue;
for(int i=0;i<v.size()-1;i++){
if(v[i+1] - v[i] <= k)
return true;
}
}
return false;
}
};