Given an array of integers nums and an integer k, return the number of unique k-diff pairs in the array.
A k-diff pair is an integer pair (nums[i], nums[j]), where the following are true:
0 <= i, j < nums.lengthi != 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[] = { 3, 1, 4, 1, 5 };int k = 2;System.out.println(findPairs(nums, k));}static int findPairs(int[] nums, int k) {TreeSet<Pair<Integer, Integer>> st = new TreeSet<>();Set<Integer> st1 = 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<Integer, Integer> mp = new HashMap<Integer, Integer>();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;} elsereturn 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 key, S 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")@Overridepublic 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>& nums, int k){set<pair<int,int>> st;set<int> st1;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,int> mp;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;}elsereturn 0;}int main(){vector<int> nums ={3,1,4,1,5};int k = 2;cout<<findPairs(nums,k);return 0;}
No comments:
Post a Comment