Leetcode_Array -- 532. K-diff Pairs in an Array [easy]

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.

给定一个整数数组和一个整数k,在数组中找唯一的k-diff对,统计其个数。k-diff对是一个整数对(i,j),这里的 i 和 j 都是数组中的元素,他们的差的绝对值是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).

Note:

  1. The pairs (i, j) and (j, i) count as the same pair.
  2. The length of the array won't exceed 10,000.
  3. All the integers in the given input belong to the range: [-1e7, 1e7].

Solutons:

Python

'''
collections.Counter()会统计nums中各个元素出现的次数,并变换成Counter的字典形式:
Counter({1: 2, 3: 1, 4: 1, 5: 1})
当k<0时,返回0;当k=0时,返回元素出现次数大于一次的元素总数;当k>0时,如果元素加k存在于Counter中
则计数,最终返回count

'''
class Solution:
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        
        count = 0
        c = collections.Counter(nums)
        for i in c:
            if k>0 and i+k in c or k==0 and c[i]>1:
                count += 1
        return count
C++

/*
先定义一个元素次数统计的哈希表Map,然后遍历Map,思路和python一样
*/
class Solution {
public:
    int findPairs(vector<int>& nums, int k) {
        unordered_map<int,int> Map;
        int count = 0;
        for(int i :nums){
            Map[i]++;
        }
        for (auto i : Map){   //这里直接遍历Map中的元素,i为键值对形式,first为键,second为值
            if (k==0&&i.second >1 || k>0&&Map.count(i.first+k)!=0){
                count++;
            }
        }
        return count;
    }
};

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值