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]]