Duplicate Within a Sliding Window

easy array hash map

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.

Inputnums = [1,2,3,1,2,3], k = 2
Outputfalse
Each 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;
}
Time: O(n) Space: O(n)