给你一个整数数组
nums
和一个整数k
,判断数组中是否存在两个 不同的索引i
和j
,满足nums[i] == nums[j]
且abs(i - j) <= k
。如果存在,返回true
;否则,返回false
。
代码:
第一次尝试:
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
if(k==0) return false
if(nums.length<=k) if([...new Set(nums)].length<nums.length) return true
else return false
for(let i=0 ; i<nums.length-k; i++ ){
let num = nums.slice(i,i+k+1)
// console.log(1,nums,num,[...new Set(num)].length)
if([...new Set(num)].length<k+1) return true
}
return false
};
//超时了。
第二次尝试:
var containsNearbyDuplicate = function(nums, k) {
if(k==0) return false
if(nums.length<=k) if([...new Set(nums)].length<nums.length) return true
else return false
let m = new Map()
for(let i=0 ; i<nums.length; i++ ){
if(!m.has(nums[i])){
m.set(nums[i],i)
}else{
if(m.get(nums[i])+k>=i) return true
else m.set(nums[i],i)
}
// console.log(m)
}
return false
};
成功通过。