存在重复元素Ⅱ(简单)
2020年5月30日
题目来源:力扣
解题
存在重复元素的升级版,同样也是水题。
使用HashSet可以节省空间,把整个集合控制在k个元素以内,相当于一个滑动窗口,如果下个元素在滑动窗口内有匹配的,那就是true。
HashSet
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set=new HashSet<>();
for(int i=0;i<nums.length;i++){
if(set.contains(nums[i])) return true;
set.add(nums[i]);
if(set.size()>k)
set.remove(nums[i-k]);
}
return false;
}
}
使用HashMap速度更快一点,保存元素值做key,下标做value。利用key值唯一这一点可以刷新value值。
HashMap
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> map=new HashMap<>();
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;
}
}