给你一个整数数组?nums
?和一个整数?k
?,判断数组中是否存在两个?不同的索引?i
?和?j
?,满足?nums[i] == nums[j]
?且?abs(i - j) <= k
?。如果存在,返回?true
?;否则,返回?false
?。
示例?1:
输入:nums = [1,2,3,1], k = 3 输出:true
示例 2:
输入:nums = [1,0,1,1], k = 1 输出:true
示例 3:
输入:nums = [1,2,3,1,2,3], k = 2 输出:false
提示:
1 <= nums.length <= 105
-109 <= nums[i] <= 109
0 <= k <= 105
方法1:
if (nums.length == 1){
return false;
}
boolean flag = false;
int exist = 0;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j <= Math.min(i + k, nums.length-1); j++) {
if (nums[i] == nums[j]){
flag = true;
exist = 1;
break;
}
}
if (exist == 1){
break;
}
}
return flag;
}
方法2:
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set= new HashSet<>();
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;
}