1187. 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.

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].

您在真实的面试中是否遇到过这个题?   是

样例

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).

这道题没有什么难度,用可以排序的关联容器就比较容易解决,但我开始用了set,我本来认为只要出现过就可以不必计数,但在第二个数据就没有过。

输入
[1,3,1,5,4]
0
输出
4
期望答案
1

参考答案来看只有[1,1]才是正确的。

于是改用map容器,此时我又犯了一个错误,map容器中count函数只能判断是否存在,count的返回值只有0或者1.

class Solution {
public:
    /**
     * @param nums: an array of integers
     * @param k: an integer
     * @return: the number of unique k-diff pairs
     */
    int findPairs(vector<int> &nums, int k) {
        // Write your code here
        map<int,int> m_map;
        int sum=0;
        for(int i=0;i<nums.size();i++) 
            m_map[nums[i]]++;
        for (map<int, int> ::iterator it = m_map.begin(); it != m_map.end();it++) {
			it->second--;
			if (m_map.count(it->first + k)>0&&m_map[it->first + k]>0) 
				sum++;
		}
        return sum;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值