[leetcode数组系列]5 数组中的k-diff数对

这是我的面试经历以及整理的相关面试高频题目,希望对大家有帮助。面试集锦

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

一 题目

给定一个整数数组和一个整数 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表
    [leetcode数组系列]5 数组中的k-diff数对
  • 遍历hash,将当前值作为key,如下图。
    [leetcode数组系列]5 数组中的k-diff数对
  • 此时key为3,加上k值,k=2,3+2=5,查看map中是否有5,我们发现5在map中已经存在,查找对数+1.
    [leetcode数组系列]5 数组中的k-diff数对
  • 依次遍历完所有数并出现如下结果(假设k=2的情况)。
    [leetcode数组系列]5 数组中的k-diff数对

3 代码实现

  • c++版本
    [leetcode数组系列]5 数组中的k-diff数对
  • python版本
    [leetcode数组系列]5 数组中的k-diff数对
  • java版本
    [leetcode数组系列]5 数组中的k-diff数对

4 收尾

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

❤️ 看完三件事:如果您看完有一点点收获,快速迎娶白富美方式:
1 关注公众号「我是程序员小贱」,第一时间阅读最新的文章,公众号后台回复 [小天使] 送你 最新的编程技术资料。
2 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
3 关注我和专栏,让我们成为好基友。