[图解leetcode高频面试之数组系列]5 数组中的k-diff数对

195 阅读2分钟

面试集锦

老规矩,不白嫖,点赞再看!

一 题目

给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k.

示例

输入:[1, 2, 3, 4, 5], k = 1 输出: 4 解释: 数组中有四个 1-diff 数对, (1, 2), (2, 3), (3, 4) 和 (4, 5)。 输入: [1, 3, 1, 5, 4], k = 0 输出: 1 解释: 数组中只有一个 0-diff 数对,(1, 1)。

1 leetcode连接

leetcode原题连接

小蓝希望大家在此思考1分钟,

效果会更好哈!

2 题目解析

  • 思路一 和前面咱们练习的"两数之和"有相似的地方,方法一是通过暴力,两层循环O(n*n)方式完成,这里就不赘述了哈。
  • 思路二 利用两数之间的关系。比如A-B=K,A=B+K和B=A-K;那什么数据结构方便我们这样的操作呢?这里引入hash表,我们将数组元素A存放于hash表中,再查看A-K是否也在表中,如果在就满足条件累加,否则继续遍历。下面具体阐述一下。
  • 初始化hash表 在这里插入图片描述
  • 遍历hash,将当前值作为key,如下图。 在这里插入图片描述
  • 此时key为3,加上k值,k=2,3+2=5,查看map中是否有5,我们发现5在map中已经存在,查找对数+1. 在这里插入图片描述
  • 依次遍历完所有数并出现如下结果(假设k=2的情况)。 在这里插入图片描述

3 代码实现

  • c++版本 在这里插入图片描述
  • python版本
  • java版本 在这里插入图片描述

4 收尾

系列算法题均采用三种不同的语言实现,满足不同小伙伴的需求。如有不对的地方希望小伙伴指出,感谢!