219. 存在重复元素 II
分析
这题也是数组的滑动窗口问题
反向理解:只要在这个固定的窗口里存在重复元素,就满足题目要求abs(i-j)<=k
;如果不存在就一直移动窗口
滑动窗口(固定大小为k的窗口)
此题目与209题不同的是,这次是要维护一个固定大小(k)的窗口
如果窗口内有目标值就返回true
没有则添加进窗口
注意的是要维护窗口的长度为k
代码
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
//窗口
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
if (set.contains(nums[i])) {
return true;
}
set.add(nums[i]);
//维护窗口长度为k,超过就删除头部元素
if (set.size() > k) {
set.remove(nums[i-k]);
}
}
return false;
}
}