这个问题可以使用哈希表来高效解决,我们可以在遍历数组的同时记录每个数字最近出现的索引,并检查当前数字是否之前出现过且索引差满足条件。
class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int num = nums[i];// 如果当前数字之前出现过,并且索引差 <= kif (map.containsKey(num) && i - map.get(num) <= k) {return true;}// 更新当前数字的最新索引map.put(num, i);}return false;}
}
-
我们使用一个
HashMap
来存储数字和它们最近一次出现的索引。 -
遍历数组时,对于每个数字:
-
检查它是否已经在哈希表中存在
-
如果存在且当前索引与之前索引的差 ≤ k,返回 true
-
否则更新哈希表中该数字的索引为当前索引
-
-
如果遍历完整个数组都没有找到满足条件的数字对,则返回 false