要求判断数组中是否有两个相同的元素其距离在k之内。
可以利用一个辅助的存储空间记录之前的元素来帮助判断。
可以利用一个set或者是队列保存最近的k个元素(利用start和end记录set中最早和最晚元素的下标,方便直接删除超过k范围的元素)
我使用了一个map来记录所有元素的最近出现位置,通过判断每一个元素的上一次出现的位置来判断是否符合条件
public class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> m = new HashMap<Integer,Integer>();
for( int i=0;i<nums.length;i++)
{
if(m.containsKey(nums[i])&&(i-m.get(nums[i])<=k))
{
return true;
}
m.put(nums[i],i);
}
return false;
}
}