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
Solutions
My solution
classSolution {public:boolcontainsNearbyDuplicate(vector<int>& nums,int k) { unordered_map<int,int> hash; // hash[num]: frequency of num in the sliding window of length kfor(int i =0; i <nums.size(); ++i){if(++hash[nums[i]] >1)returntrue;if(i >= k)--hash[nums[i - k]]; }returnfalse; }};
Another solution
classSolution {public:boolcontainsNearbyDuplicate(vector<int>& nums,int k) { unordered_map<int,int> hash; // hash[num]: the index of the last occurrence of numfor(int i =0; i <nums.size(); ++i){auto it =hash.find(nums[i]);if(it !=hash.end() && i -it->second <= k)returntrue;hash[nums[i]] = i; }returnfalse; }};