给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使 nums [i] = nums [j],并且 i 和 j 的绝对差值最大为 k。

详见:https://leetcode.com/problems/contains-duplicate-ii/description/

Java实现:



class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
int n=nums.length;
if(n==0||nums==null){
return false;
}
Map<Integer,Integer> m=new HashMap<Integer,Integer>();
for(int i=0;i<n;++i){
if(m.containsKey(nums[i])&&(i-m.get(nums[i])<=k)){
return true;
}
m.put(nums[i],i);
}
return false;
}
}


C++实现:



class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
int size=nums.size();
if(size==0||nums.empty())
{
return false;
}
unordered_map<int,int> m;
for(int i=0;i<size;++i)
{
if(m.find(nums[i])!=m.end()&&i-m[nums[i]]<=k)
{
return true;
}
m[nums[i]]=i;
}
return false;
}
};