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 absolute difference between i and j is at most k.
问题解释:是否存在相同的两个元素,他们的距离不超过给定的数值k
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
if(i-map.get(nums[i])<=k){
return true;
}
}
map.put(nums[i],i);
}
return false;
}
}
采用HashMap(http://blog.sina.com.cn/s/blog_6d2890600100l7id.html),直接查找元素nums[i]是否存在于map中,若不存在则放入,存在则判定是否满足限定条件小于等于k值
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { HashSet<Integer> set = new HashSet<>(); for(int i = 0; i < nums.length; i++){ if(set.contains(nums[i])){ return true; } else { set.add(nums[i]); if(i >= k){ set.remove(nums[i - k]); } } } return false; } }
利用HashSet也可以解决问题,若set不包含该元素则放入set中,且将第i-k个元素删除,相当于保证set中只有i-1个元素;
这样,只要能在set中找到这个元素,就能判定两个数值之差小于等于k符合限定条件