Problem description:

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most 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

Solution:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> map;
for(int i= 0; i< nums.size(); i++){
if(map.find(nums[i]) != map.end()){
if(i - map[nums[i]] <= k)
return true;
}
map[nums[i]]= i;
}
return false;
}
};

time complexity: $O(n)$
space complexity: $O(n)$
reference: