维护一个最多元素为k的set,利用set中无重复元素的特性,一次遍历数组,每次将一个元素写入set,超出k个则将最先写入的元素移出。若检测到相同元素,说明他们之间的距离不超过k,符合题意。
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
s = new Set()
for(let i in nums) {
if (s.has(nums[i])) return true
s.add(nums[i])
if (s.size > k) {
s.delete(nums[i-k]) //移出最早加入的元素
}
}
return false
};