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

最新文章

  1. 【Telerik】查询控件&lt;telerik:RadMaskedTextBox&gt;的使用
  2. php 选择排序法
  3. megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题
  4. SpringMVC基础——一个简单的例子
  5. java模拟有验证码的Http登陆
  6. CDHtmlDialog加壳HTML5页面跳转错误解决(原)
  7. PHP &quot;gdImageCreateFromXpm()&quot;空指针间接引用漏洞
  8. avd name对AVD的创建的影响
  9. Log4Net 使用总结
  10. git flow 的使用
  11. .net core系列之初识asp.net core
  12. Jmeter中基本操作
  13. USING KERBEROS
  14. Android popupwindow 失去焦点或者点击空白区域时消失的解决方法
  15. 如何清除SQLServer服务器名称、登录名等
  16. Nginx IP地址透传
  17. 【HNOI2016】矿区
  18. 开源项目kcws代码分析--基于深度学习的分词技术
  19. Java-ThreadLocal,Java中特殊的线程绑定机制
  20. CentOS 6.5 下搭建FastDFS服务

热门文章

  1. React跨域
  2. jquery移动端一个按钮两个事件
  3. Code Chef DARTSEGM(计算几何+凸包)
  4. php文件每隔几秒执行一次
  5. [Swift实际操作]七、常见概念-(2)点CGPoint和变形CGAffineTransform的使用
  6. Centos7安装Chacha20加密算法 (验证成功)
  7. byte范围及8种常见数据类型
  8. 项目实体类使用@Data注解,但是项目业务类中使用getA(),setA()方法报错,eclipse中配置lombok
  9. Xshell连接不上虚拟机Linux系统
  10. 一桩由X509Certificate2引发的血案