Given an array of integers nums
, return the number of good pairs.
A pair (i, j)
is called good if nums[i] == nums[j]
and i
< j
.
Example 1:
Input: nums = [1,2,3,1,1,3] Output: 4 Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed.
Example 2:
Input: nums = [1,1,1,1] Output: 6 Explanation: Each pair in the array are good.
Example 3:
Input: nums = [1,2,3] Output: 0
Constraints:
1 <= nums.length <= 100
1 <= nums[i] <= 100
class Solution:
def numIdenticalPairs(self, nums: List[int]) -> int:
counter = Counter(nums)
return sum([x * (x - 1) for x in counter.values()]) >> 1
class Solution {
public int numIdenticalPairs(int[] nums) {
Map<Integer, Integer> counter = new HashMap<>();
for (int num : nums) {
counter.put(num, counter.getOrDefault(num, 0) + 1);
}
int res = 0;
for (int n : counter.values()) {
res += n * (n - 1);
}
return res >> 1;
}
}
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
unordered_map<int, int> counter;
for (int num : nums) {
++counter[num];
}
int res = 0;
for (auto& [num, n] : counter) {
res += n * (n - 1);
}
return res >> 1;
}
};
func numIdenticalPairs(nums []int) int {
counter := make(map[int]int)
for _, num := range nums {
counter[num]++
}
res := 0
for _, n := range counter {
res += n * (n - 1)
}
return res >> 1
}