当前位置: 代码迷 >> 综合 >> 领扣LintCode算法问题答案-1187. 数组中的K-diff对
  详细解决方案

领扣LintCode算法问题答案-1187. 数组中的K-diff对

热度:29   发布时间:2024-02-24 15:25:30.0

领扣LintCode算法问题答案-1187. 数组中的K-diff对

目录

  • 1187. 数组中的K-diff对
    • 描述
    • 样例 1:
    • 样例 2:
    • 样例 3:
  • 题解
  • 鸣谢

1187. 数组中的K-diff对

描述

给定一个整数数组和一个整数 k ,您需要找到数组中唯一 k-diff 对的数量。这里 k-diff 对被定义为整数对 (i, j),其中 ij 都是数组中的数字,它们的绝对差是 k

  1. 对(i,j)和(j,i)计为同一对。
  2. 数组的长度不超过10,000。
  3. 给定输入中的所有整数都属于以下范围:[ -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;}
}

原题链接点这里

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。