给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
function containsNearbyDuplicate(nums: number[], k: number): boolean {
// Map 存储:数字 -> 该数字最后一次出现的索引
const map = new Map<number, number>();
for (let i = 0; i < nums.length; i++) {
const n = nums[i];
// 如果之前见过这个数,且距离满足条件
if (map.has(n) && i - map.get(n)! <= k) {
return true;
}
// 无论是否见过,都更新该数字的最末索引
// 这样可以确保下次计算的是“最短距离”
map.set(n, i);
}
return false;
};