存在重复元素 II :两个重复元素的距离小于等于 k
给你一个整数数组 nums 和一个整数 k,判断是否存在两个不同的索引 i 和 j,
满足:
1. nums[i] == nums[j]
2. abs(i - j) <= k
1、当窗口大小小于 k
时,扩大窗口。
2、当窗口大小大于 k
时,缩小窗口。
3、当窗口大小等于 k
且发现窗口中存在重复元素时,返回 true。
关键点:
- 窗口
win
使用集合 Set
,来判断是否已经出现了每个元素了
var containsNearbyDuplicate = function (nums, k) {
let n = nums.length;
let left = 0;
let right = 0;
let win = new Set();
while (right < n) {
let num = nums[right];
// 如果当前元素已经在窗口中,说明找到了符合条件的重复元素
if (win.has(num)) {
return true;
}
win.add(num);
right++;
// 如果窗口大小超过 k,删除窗口最左边的元素
if (right - left > k) {
win.delete(nums[left]);
left++;
}
}
return false;
};