K-diff Pairs in an Array

Given an array of integers nums and an integer k, return the number of unique k-diff pairs in the array.

k-diff pair is an integer pair (nums[i], nums[j]), where the following are true:

  • 0 <= i, j < nums.length
  • i != j
  • |nums[i] - nums[j]| == k

Notice that |val| denotes the absolute value of val.

Example 1:

Input: nums = {3,1,4,1,5}, k = 2
Output: 2

Approach

Java


import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class KDiffPairsInArray {
    public static void main(String[] args) {
        int nums[] = { 31415 };
        int k = 2;
        System.out.println(findPairs(nums, k));
    }

    static int findPairs(int[] numsint k) {
        TreeSet<Pair<IntegerInteger>> st = new TreeSet<>();
        Set<Integerst1 = new HashSet<Integer>();

        for (int i = 0; i < nums.length; i++)
            st1.add(nums[i]);

        Arrays.sort(nums);

        if (k > 0) {
            for (int i = 0; i < nums.length; i++) {
                if (st1.contains(Math.abs(k) + nums[i])) {
                    st.add(new Pair(nums[i], (Math.abs(k) + nums[i])));
                }
            }
            return st.size();
        } else if (k == 0) {
            Map<IntegerIntegermp = new HashMap<IntegerInteger>();
            for (int i = 0; i < nums.length; i++)
                mp.put(nums[i], mp.getOrDefault(nums[i], 0) + 1);
            int ans = 0;
            for (int key : mp.keySet()) {
                if (mp.get(key) > 1)
                    ans += 1;
            }
            return ans;
        } else
            return 0;
    }
}



// for unique
@SuppressWarnings("rawtypes")
class Pair<F extends Comparable<F>, S extends Comparable<S>> 
                    implements Comparable<Pair> {
    private F key;
    private S value;

    public Pair() {
    }

    public Pair(F keyS value) {
        this.key = key;
        this.value = value;
    }

    public F getKey() {
        return key;
    }

    public void setKey(F key) {
        this.key = key;
    }

    public S getValue() {
        return value;
    }

    public void setValue(S value) {
        this.value = value;
    }

    @SuppressWarnings("unchecked")
    @Override
    public int compareTo(Pair o) {
        if(getKey().compareTo((F) o.getKey())==0 && 
                    getValue().compareTo((S) o.getValue())==0)
            return 0;
        return -1;
    }
}

C++

#include <bits/stdc++.h>
using namespace std;


int findPairs(vector<int>& numsint k
{
        set<pair<int,int>> st;
        set<intst1;
        for(int i=0;i<nums.size();i++)
               st1.insert(nums[i]);
        sort(nums.begin(),nums.end());
        if(k>0)
        {
        for(int i=0;i<nums.size();i++)
        {
            if(st1.find(abs(k)+nums[i])!=st1.end())
                   st.insert({nums[i],abs(k)+nums[i]});
        }
        return st.size();
        }
        else if(k==0)
        {
            map<int,intmp;
            for(int i=0;i<nums.size();i++)
                   mp[nums[i]]++;
           int ans=0;
            for(auto it=mp.begin();it!=mp.end();it++)
            {
                if(it->second>1)
                      ans+=1;
            }
            return ans;
        }
        else
             return 0;
}
int main()
{
    vector<intnums ={3,1,4,1,5};
    int  k = 2;
    cout<<findPairs(nums,k);
    return 0;
}



No comments:

Post a Comment