Duplicate Within a Sliding Window
Problem
Decide whether the array contains two equal values whose indices differ by at most k. Walk left to right and remember the most recent index where each value was seen; when you revisit a value, check whether its previous index is within k.
Input
nums = [1,2,3,1,2,3], k = 2Output
falseEach repeated value is exactly 3 indices apart — outside the window.
def contains_nearby_duplicate(nums, k):
last_idx = {}
for i, v in enumerate(nums):
if v in last_idx and i - last_idx[v] <= k:
return True
last_idx[v] = i
return False
function containsNearbyDuplicate(nums, k) {
const lastIdx = new Map();
for (let i = 0; i < nums.length; i++) {
if (lastIdx.has(nums[i]) && i - lastIdx.get(nums[i]) <= k) return true;
lastIdx.set(nums[i], i);
}
return false;
}
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer, Integer> lastIdx = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
Integer prev = lastIdx.get(nums[i]);
if (prev != null && i - prev <= k) return true;
lastIdx.put(nums[i], i);
}
return false;
}
}
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> lastIdx;
for (int i = 0; i < (int)nums.size(); ++i) {
auto it = lastIdx.find(nums[i]);
if (it != lastIdx.end() && i - it->second <= k) return true;
lastIdx[nums[i]] = i;
}
return false;
}