【代码】
其实本题按照步骤写就可以
【第一步】 创建map 中 key 为数组的值,value 为下标
【第二步】 判断元素否存在
- 如果不存在,则将该元素加入到map中
- 如果存在,判断两个数组元素的下标是否小于k
- 如果小于,则返回为真
- 如果不小于,则更新map的值
次数为什么要更新map的值呢?
思考这个场景数组nums = [1,2,1,1]; k = 1;
第一次判断第一个1 和第2 个 是超过 k 的,但是第二个1和第三个1是不超过的。因此需要更新map的值。
package hash;
import java.util.HashMap;
public class ContainsNearbyDuplicate {
public static void main(String[] args) {
int[] nums = {1,0,1,1};
int k = 1;
boolean flag = containsNearbyDuplicate(nums, k);
System.out.println("flag = " + flag);
}
public static boolean containsNearbyDuplicate(int[] nums, int k) {
// 1. 将nums 存入map 中 key 为当前值,value 为下标
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
// 2.判断是否存在
if (!map.containsKey(nums[i])) {
// 2.1不存在则存入
map.put(nums[i],i);
// 2.2存在则判断长度 是否小于k
} else {
int value = map.get(nums[i]);
if (Math.abs(i-value) <= k) {
return true;
//2.3如果不小于k则更新map的值。
} else {
map.put(nums[i],i);
}
}
}
return false;
}
}