原题说的是给定一个整数数组和整数k,判断数组中是否存在两个不同的索引 i 和 j ,使得nums[i] = nums[j],并且 j 和 i 的绝对值最大的差为k,理解的时候有些问题,看了题解后才知道题目的意思是,判断数组中是否存在两个相等的元素,他们索引差的绝对值小于等于k
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
int i = 0;
Set<Integer> set = new HashSet();//使用哈希表维持一个大小为k的滑动窗口
for(i = 0;i < nums.length;i++){
if(set.contains(nums[i])) return true;//只要存在距离小于等于k的两个相等元素,就返回true,也就是说只要有两个相等的元素存在于大小为k的滑动窗口内,就返回true
set.add(nums[i]);
if(set.size() > k)//窗口大小超过k就删除最老的元素
set.remove(nums[i - k]);
}
return false;
}
}