题目地址:
https://leetcode.com/problems/number-of-good-pairs/
给定一个数组 A A A,问存在多少个数对 ( i , j ) (i,j) (i,j)使得 A [ i ] = A [ j ] A[i]=A[j] A[i]=A[j]并且 i < j i<j i<j。
如果数 k k k在 A A A中存在了 s s s次,那么它对数对数量的贡献就是 ( s 2 ) = s ( s − 1 ) 2 {s\choose 2}=\frac{s(s-1)}{2} (2s)=2s(s−1)。累加一下即可。代码如下:
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int numIdenticalPairs(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
}
int res = 0;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
res += entry.getValue() * (entry.getValue() - 1) / 2;
}
return res;
}
}
时空复杂度 O ( n ) O(n) O(n)。