例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; }