[leetCode]219. 存在重复元素 II
csdn:https://blog.csdn.net/renweiyi1487/article/details/109319192
题目
给定一个整数数组和一个整数 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
哈希
使用map集合记录元素及其下标,代码已经详细注释
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
int n = nums.length;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
if (!map.containsKey(nums[i])) { // 不包含这个元素则添加这个元素
map.put(nums[i], i);
} else { // 已存在该元素则计算两元素之间的距离,符合标准则返回true,不符合则更新元素下标
int dis = Math.abs(i - map.get(nums[i]));
if (dis <= k)
return = true;
else {
map.put(nums[i], i);
}
}
}
return false;
}
}