219. Contains Duplicate II
Given an integer array nums and an integer k, return true if there are two distinct indices i and j in the array such that nums[i] == nums[j] and abs(i - j) <= k.
Example 1:
Example 2:
Example 3:
Solution:
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++){
int cur = nums[i];
if (map.containsKey(cur)){
int index = map.get(cur);
int abs = Math.abs(index - i);
if (abs <= k){
return true;
}
}
map.put(cur, i);
}
return false;
}
}
// TC: O(n)
// SC: O(n)
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++){
if (set.contains(nums[i])){
return true;
}
set.add(nums[i]);
if (set.size() > k){
set.remove(nums[i-k]);
}
}
return false;
}
}
// TC:O(n)
// SC:O(min(n, k))