力扣每日一题
样例为[1,2,1] 0时不过。因为,这代码是先判断set是否满了再添加。如果k为0,则set初始就为0。直接错。
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;
else{
if(set.size()>=k)//set容量满了
set.remove(nums[i-k]);//删掉元素
set.add(nums[i]);//添加元素
}
}
return false;
}
}
正确代码
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]))//因为set的长度已经固定了,如果set内有相同的就return true
return true;
set.add(nums[i]);
if(set.size()>k){//长度超了就移除最早加进来的元素维护set的大小
set.remove(nums[i-k]);
}
}
return false;
}
}