Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.
Tags
Array, Hash Table
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function (nums, k) {
var len = nums.length;
for (var i = 0; i < len - 1; i++) {
for (var j = len - 1; j > i; j--) {
if (nums[i] === nums[j] && (j - i) <= k) {
return true;
}
}
}
return false;
};
Another solution using hash table. Mapping value to index.
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
var hash = [];
var len = nums.length;
if(len <= 1) {
return false;
}
// Hash
// value => index
for(var i in nums) {
if(hash[nums[i]]) {
if(Math.abs(hash[nums[i]] - i) <= k) {
return true;
}
}
hash[nums[i]] = i;
}
return false;
};