例1: 输入: [3,1,4,1,5],k = 2  输出: 2

说明:阵列中有两个2-diff对,(1,3)和(3,5)。 虽然我们在输入中有两个1,但我们应该只返回唯一对的数量。

例2: 输入: [1,2,3,4,5],k = 1  输出: 4

说明:阵列中有四个1-diff对,(1,2),(2,3),(3,4)和(4,5)。

例3: 输入: [1,3,1,5,4],k = 0  输出: 1  说明:数组中有一个0-diff对,(1,1)。

注意: 对(i,j)和(j,i)计为同一对。 阵列的长度不会超过10,000。 给定输入中的所有整数都属于以下范围:[ - 1e7,1e7]。

解题思路:
使用HashSet将数组中有重复的元素放在一个HashSet中,若数组为空或者数组元素长度小于2或k<0,对数为0,若k==0时,则k-diff对数是此数组重复元素的HashSet集合的大小。若k>0是将数组元素放入两个HashSet中。通过迭代器遍历元素,判断set1中是否有元素值值跟迭代器当前遍历出的元素值-k相等,有则对数加一。
public int findPairs(int[] nums, int k) {
if (nums.length<2||nums==null||k<0)
return 0;
Set<Integer> set1=new HashSet<>();
Set<Integer> set2=new HashSet<>();
Set<Integer> repeat=new HashSet<>();
for (int i=0;i<nums.length;i++)
{
if (set1.contains(nums[i]))
{
repeat.add(nums[i]);
}else {
set2.add(nums[i]);
set1.add(nums[i]);
}
}
if (k==0)
return repeat.size();
int m=0;
Iterator iterator=set1.iterator();
while (iterator.hasNext())
{
int a= (int) iterator.next();
if(set2.contains(a-k))
m++;
}
return m;
}
05-11 22:23