219 Contains Duplicate II

Problem:

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:

Input: nums = [1,2,3,1], k = 3 Output: true

Example 2:

Input: nums = [1,0,1,1], k = 1 Output: true

Example 3:

Input: nums = [1,2,3,1,2,3], k = 2 Output: false

Constraints:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • 0 <= k <= 105

Problem Analysis:

  • different approach from 217-contains-duplicate217 Contains Duplicate - EasyProblem: Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct. Example 1: Input: nums = \[1,2,3,1\] Output: true Example 2: Input: nums = \[1,2,3,4\] Output: false Example 3: Input: nums = \[1,1,1,3,3,4,3,2,4,2\] Output: true Constraints: * `1 bool: count= {} for n in nums: count[n] = count.get(n, 0) + 1 if count[n] > 1: return True return
  • need to use sliding window strategy

Solutions:

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        window = set()
        L = 0

        for R in range(len(nums)):
            if R - L > k:
                # remove the window from the left
                window.remove(nums[L])
                L += 1
            if nums[R] in window:
                return True
            # shift window to right
            window.add(nums[R])```

## Similar Questions
[[217-contains-duplicate]]