给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
示例 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.遍历数组,使用hashmap进行存储,key为数组中的值,value为索引
2.当一个数进来的时候,首先判断它是否已经存在于hashmap中
2.1如果不存在,则添加键值对
2.2如果已经存在,则分情况讨论
2.2.1如果当前索引和已经存在的索引绝对值之差小于等于k,则返回true
2.2.2如果当前引和已经存在的索引绝对值之差大于k,不符合题意,划重点:需要将新的索引put进来
public class containsnearbyduplicate {
public boolean containsNearbyDuplicate(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
Integer value = map.get(nums[i]);
if (value == null){
map.put(nums[i], i);
}else {
if (Math.abs(i-value) <= k){
return true;
}else {
map.put(nums[i], i);
}
}
}
return false;
}
}