题目来源: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;
}
本文针对LeetCode上的含有重复项II题目提供了一种解决方案。通过使用哈希表记录数组元素及其索引,可以有效地判断是否存在两个索引i和j,使得nums[i]==nums[j]且|i-j|≤k。

被折叠的 条评论
为什么被折叠?



