给你一个整数数组 nums .
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
一般解法
用ans保存好数对个数。
连个循环,外层从nums[0]到倒数第二个元素,内层循环从外层循环到最后一个元素,若相等,则ans+1。
返回ans。
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
int ans = 0;
for(int i = 0;i<nums.size()-1;i++){
for(int j = i+1;j<nums.size();j++){
if(nums[j]==nums[i]){
ans++;
}
}
}
return ans;
}
};
大神解法
用unordered_map统计出每个元素出现的次数,然后用数学方法计算好数对数。
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
unordered_map <int, int> m;
for (int num: nums) {
++m[num];
}
int ans = 0;
for (const auto &[k, v]: m) {
ans += v * (v - 1) / 2;
}
return ans;
}
};