参考链接
- https://leetcode-cn.com/problems/number-of-good-pairs/
题目描述
给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
解题思路
首先遍历数组,使用哈希表存储每个数字出现的次数。而每个数字相应的好对数的数量是有规律的。例如一个数字出现了3次,那么好对数个数为2+1=3;一个数字出现了4次,那么好对数个数为3+2+1=6。显然,是等差数列和,用公式计算即可。
代码
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
int res = 0;
unordered_map<int, int> mp;
for (int i = 0; i < nums.size(); i ++)
{
mp[nums[i]] += 1;
}
for (auto& it : mp)
{
res += (it.second * it.second - it.second) / 2;
}
return res;
}
};