classSolution { publicbooleancontainsNearbyDuplicate(int[] nums, int k) { Map<Integer, Integer> map = newHashMap<>(); for (inti=0; i < nums.length; ++i) { if (map.containsKey(nums[i])) { intj= map.get(nums[i]); if (Math.abs(i - j) <= k) returntrue; map.put(nums[i], i); } map.put(nums[i], i); } returnfalse; } }
时间复杂度:$O(n)$
空间复杂度:$O(n)$
方法二:滑动窗口+哈希表
1 2 3 4 5 6 7 8 9 10
classSolution { publicbooleancontainsNearbyDuplicate(int[] nums, int k) { Set<Integer> set = newHashSet<>(); for (inti=0; i < nums.length; ++i) { if (i > k) set.remove(nums[i - k - 1]); if (!set.add(nums[i])) returntrue; } returnfalse; } }