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.
使用map记录元素出现的位置,再次出现时,比较一下这次的位置和上次的位置之差是否小于等于k。是就可以返回了,不是就将旧的记录换成新的。
var containsNearbyDuplicate = function(nums, k) {
var num = nums.length;
if (num===0)
return false;
var map = {};
for (var i = 0; i < num; i++) {
if (map[nums[i]]!==undefined&&(i-map[nums[i]])<=k)
return true;
map[nums[i]] = i;
}
return false;
};
在有Set数据结构的语言中,使用Set会更快:
这里相当于使用set判断一个k范围内是否有重复的数,然后将这个范围从头移到尾。
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < nums.length; i++){
if(i > k) set.remove(nums[i-k-1]);
if(!set.add(nums[i])) return true;
}
return false;
}