领扣LintCode算法问题答案-1187. 数组中的K-diff对
目录
- 1187. 数组中的K-diff对
-
- 描述
- 样例 1:
- 样例 2:
- 样例 3:
- 题解
- 鸣谢
1187. 数组中的K-diff对
描述
给定一个整数数组和一个整数 k ,您需要找到数组中唯一 k-diff 对的数量。这里 k-diff 对被定义为整数对 (i, j),其中 i 和 j 都是数组中的数字,它们的绝对差是 k 。
- 对(i,j)和(j,i)计为同一对。
- 数组的长度不超过10,000。
- 给定输入中的所有整数都属于以下范围:[ -1e7, 1e7]。
样例 1:
输入: [3, 1, 4, 1, 5], k = 2
输出: 2
说明:数组中有两个2-diff对,(1, 3)和(3, 5)。
虽然我们在输入中有两个1,但我们应该只返回一对(1,3)。
样例 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).
题解
public class Solution {
/*** @param nums: an array of integers* @param k: an integer* @return: the number of unique k-diff pairs*/public int findPairs(int[] nums, int k) {
// Write your code hereint ret = 0;Arrays.sort(nums);Set<Integer> uniqueRecord = new HashSet<>();for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length; j++) {
int lowNum = nums[i];int highNum = nums[j];if (highNum - lowNum > k) {
break;}if (highNum - lowNum == k) {
if (!uniqueRecord.contains(highNum)) {
ret++;uniqueRecord.add(highNum);}break;}}}return ret;}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。