题目来源:https://leetcode-cn.com/problems/contains-duplicate-ii/
大致题意:
给一个数组和整数 k,判断数组中是否有索引 i 和 j,满足 nums[i] == nums[j],且 abs(j - i) <= k
思路
- 遍历数组,使用哈希表存下对应元素最近一次遍历的索引
- 每次遍历时判断当前元素值在哈希表中是否存在,若存在,判断两个索引是否满足条件,若满足直接返回 true;否则继续遍历
- 若遍历结束,表示数组中没有符合条件的重复元素,返回 false
代码:
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
int n = nums.length;
for (int i = 0; i < n; i++) {
// 判断哈希表是否存在该元素
if (map.containsKey(nums[i])) {
int idx = map.get(nums[i]);
// 若满足条件直接返回结果
if (k >= i - idx) {
return true;
}
}
// 更新索引
map.put(nums[i], i);
}
return false;
}