给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/contains-duplicate-ii
题解思路:模拟滑动k+1个固定窗口,判断在这个窗口内是否有重复的元素,当前窗口存在则返回true,否则删除窗口第一个元素,继续往下挪,直到数组尾部
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
HashSet<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i++){
if(set.contains(nums[i]))
return true;
set.add(nums[i]);
if(set.size() > k)
set.remove(nums[i - k]);
}
return false;
}
}