LC.P219[存在重复元素II]

方法一:哈希表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; ++i) {
if (map.containsKey(nums[i])) {
int j = map.get(nums[i]);
if (Math.abs(i - j) <= k) return true;
map.put(nums[i], i);
}
map.put(nums[i], i);
}
return false;
}
}
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(n)$

方法二:滑动窗口+哈希表

1
2
3
4
5
6
7
8
9
10
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; ++i) {
if (i > k) set.remove(nums[i - k - 1]);
if (!set.add(nums[i])) return true;
}
return false;
}
}
  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(k)$