存在重复元素2

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 ij,使得 nums [i] = nums [j],并且 ij 的差的绝对值最大为 k

示例 1:

1
2
输入: nums = [1,2,3,1], k = 3
输出: true

示例 2:

1
2
输入: nums = [1,0,1,1], k = 1
输出: true

示例 3:

1
2
输入: nums = [1,2,3,1,2,3], k = 2
输出: false

代码

利用HashMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean containsNearbyDuplicate(int[] nums, int k) {
//如果数组长度小于2,直接返回false
if (nums.length < 2) return false;
//创建HashMap记录上一次元素出现的索引位置
HashMap<Integer, Integer> map = new HashMap<>(nums.length);
Integer put = null;
for (int i = 0; i < nums.length; i++) {
//返回的是上一次索引位置
put = map.put(nums[i], i);
//如果上一次索引位置不等于null并且索引差不大于k,则返回true
if (put!=null&&i - put <= k) return true;
}
return false;
}