1. 程式人生 > >532. K-diff Pairs in an Array(python+cpp)

532. K-diff Pairs in an Array(python+cpp)

題目:

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

Note: The pairs (i, j) and (j, i) count as the same pair. The length of the array won’t exceed 10,000

. All the integers in the given input belong to the range:[-1e7, 1e7].

解釋: 需要用到Counter()統計每個數字出現的次數,需要對k進行判斷。 python程式碼:

from collections import Counter
class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
if k<0 or not nums: return 0 c=Counter(nums) if k==0: return len([i for i in c if c[i]>1]) if k>0: return sum([i+k in c for i in c])

c++程式碼:

#include<map>
using namespace std;
class Solution {
public:
    int findPairs(vector<int>& nums, int k) {
        if(k<0 || nums.size()==0)
            return 0;
        map<int,int>_map;
        for (auto num:nums)
            _map[num]++;
        int cnt=0;
        if (k==0)
        {
            
            for(auto item:_map)
                if(item.second>1)
                    cnt++;
        }
        else
        {
            for (auto item:_map)
                if(_map.count(item.first+k))
                    cnt+=1;
        }
        return cnt;      
    }
};

總結: 啊,我真的好喜歡我的新紅軸機械鍵盤啊~!