老规矩,不白嫖,点赞再看!
一 题目
给定一个整数数组和一个整数 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连接
小蓝希望大家在此思考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 收尾
系列算法题均采用三种不同的语言实现,满足不同小伙伴的需求。如有不对的地方希望小伙伴指出,感谢!