532 -数组中的K-diff对

例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;
            }
原文地址:https://www.cnblogs.com/dloading/p/10713522.html