//method 1
class Solution {
public:
int findPairs(vector<int>& nums, int k) {
int res = 0;
sort(nums.begin(),nums.end());
int n = nums.size();
for(int i = 0, j = 0; i < n;i++)
{
while(i > 0 && i < n - 1 && nums[i + 1] == nums[i]) i++;
while(j < i && nums[i] - nums[j] > k) j++;
if(j < i && nums[i] - nums[j] == k) res++;
}
return res;
}
};\
//method 2
class Solution {
public:
unordered_map<int,int> less;
unordered_map<int,int> greater;
int findPairs(vector<int>& nums, int k) {
int n = nums.size();
int res = 0;
for(int i = 0; i < n;i++)
{
if(less.count(nums[i] - k))
{
if(!greater.count(nums[i])) greater[nums[i]]++;
}
if(less.count(nums[i] + k))
{
if(!greater.count(nums[i] + k)) greater[nums[i]+k]++;
}
if(!less.count(nums[i])) less[nums[i]]++;
}
res = greater.size();
return res;
}
};