题目
方法一:循环嵌套(类似九九乘法表的思路)
假设数组的长度为n,取i,j两个变量,0<= i < j <=n,遍历数组,输出好数对的数目sum
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
int sum = 0; // 计算好数对的数目
int n = nums.size(); // 抓取数组的长度
int i = 0, j = i + 1; // 初始化两个变量
for (int i = 0;i < n-1;++i){ //外层循环,i每次+1
for(int j = i+1; j < n; ++j){ // 内层循环 j每次+1
if(nums[i] == nums[j] & i < j){
++sum;
}
}
}
return sum;
}
};
方法二:哈希表
哈希表的内容补充可看文章:一文看懂哈希表并学会使用C++ STL 中的哈希表_哈希表有哪些函数-CSDN博客
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;
}
};