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.
方法1:使用map(72ms)
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
map<int,int>m;
for(int i=0;i<nums.size();i++)
{
if(m[nums[i]]==0||i+1-m[nums[i]]>k) m[nums[i]]=i+1;
else
{
return true;
}
}
return false;
}
方法2:使用unordered_set(28ms)
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
unordered_set<int>Set;
int n=nums.size();
k=k<n?k:n-1;
for(int i=0;i<n;i++)
{
if(i>k) Set.erase(nums[i-k-1]);
if(Set.count(nums[i])) return true;
Set.insert(nums[i]);
}
return false;
}