219. 存在重复元素 II

给定一个整数数组和一个整数  k,判断数组中是否存在两个不同的索引  i  和  j,使得  nums [i] = nums [j],并且 i 和 j  的差的 绝对值 至多为 k。

示例 1:

1
2
输入: nums = [1,2,3,1], k = 3
输出: true

示例 2:

1
2
输入: nums = [1,0,1,1], k = 1
输出: true

示例 3:

1
2
输入: nums = [1,2,3,1,2,3], k = 2
输出: false

暴力破解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @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;
};

利用 Map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var containsNearbyDuplicate = function (nums, k) {
let map = new Map();
for (let i = 0; i < nums.length; i++) {
let j = map.get(nums[i]);
if (j === undefined) {
map.set(nums[i], i);
} else if (i - j <= k) {
return true;
} else {
map.set(nums[i], i);
}
}
return false;
};