219. 存在重复元素 II
查看原题

解题思路(双重循环)
外层数组遍历数组,内层循环判断从当前位置开始的后面k个元素是否有和当前元素相同的,如果有直接返回true,找不到则返回false。
代码
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
for(let i = 0;i<nums.length;i++){
for(let j = i+1;j<=i+k;j++){
if(nums[i] === nums[j]){
return true;
}
}
}
return false;
};

解题思路(滑动窗口)
新建一个set集合,不断向set集合中添加和删除数据,注意判断条件
- 当i>k时,说明窗口长度到达了可以删除元素的长度,每次删除set集合中的第一个存进去元素(nums[i-k-1])
- 如果集合set中有当前元素,直接返回true
代码
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
const set = new Set();
const length = nums.length;
for(let i = 0;i<length;i++){
if(i > k){
set.delete(nums[i-k-1])
}
if(set.has(nums[i])){
return true;
}
set.add(nums[i])
}
return false;
};


浙公网安备 33010602011771号