532 K-diff Pairs in an Array

532 K-diff Pairs in an Array

  • 题目描述:Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers in the array and their absolute difference is k.

    • Example 1:

      Input: [3, 1, 4, 1, 5], k = 2
      Output: 2
      Explanation: There are two 2-diff pairs in the array, (1, 3) and (3, 5).
      Although we have two 1s in the input, we should only return the number of unique pairs.
    • Example 2:

      Input:[1, 2, 3, 4, 5], k = 1
      Output: 4
      Explanation: There are four 1-diff pairs in the array, (1, 2), (2, 3), (3, 4) and (4, 5).
    • Example 3:

      Input: [1, 3, 1, 5, 4], k = 0
      Output: 1
      Explanation: There is one 0-diff pair in the array, (1, 1).
      
    • 题目大意:给定一个数组和一个k,找出数组中两个元素之间的距离为K的所有不重复对的个数。

    • 思路:使用set处理,建立两个set,一个用于存储数组中的数,一个用于存储已经使用的数,然后分两种情况处理,一种是k==0的情况,一种是k不等于0的情况.

    • 代码

      package Array;
      
      import java.util.*;
      
      public class Solution {
          public int findPairs(int[] nums, int k) {
              if (nums == null || k < 0 || nums.length == 0) {
                  return 0;
              }
              int count = 0;
              Set<Integer> set = new HashSet<>();
              Set<Integer> used = new HashSet<>();
              if (k == 0) {
                  for (int num : nums) {
                      if (set.contains(num) && !used.contains(num)) {
                          count++;
                          used.add(num);
                      } else {
                          set.add(num);
                      }
                  }
                  return count;
              }
              for (int num : nums) {
                  set.add(num);
              }
              for (int num : nums) {
                  if (!used.contains(num) && set.contains(num + k)) {
                      count++;
                      used.add(num);
                  }
              }
              return count;
          }
      
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值