1512. 好数对的数目
主要为了练习哈希表
截图来源:https://leetcode-cn.com/problems/number-of-good-pairs/
1、可以利用hash table记录不同数字出现的个数;
2、当某个数字的个数出现的次数大于等于2就存在好数对;当重复的次数是n,那么好数对就增加 n(n-1)/2;
3、遍历统计好的hash table就可以得到答案;
```c
// 依据题意限定
// 1 <= nums.length <= 100
// 1 <= nums[i] <= 100
```c
#define HASH_SIZE 101
int fun(int n)
{
return n * (n - 1) / 2;
}
int numIdenticalPairs(int* nums, int numsSize)
{
int cnt = 0;
int numsSize1 = numsSize;
int* hashT = (int*)calloc(HASH_SIZE, sizeof(int));
for (int i = 0; i < numsSize; ++i) {
hashT[nums[i]]++;
}
for (int i = 0; i < HASH_SIZE; ++i) {
if (numsSize1 < 2) { // **剪枝**
break;
}
if (hashT[i] > 1) {
numsSize1 -= hashT[i]; **/* nameSize1是总的数字数量,hashT中的值就是某个数字一共出现的次数,
减去hashT中的值就是现在一共还剩下多少数字,剪枝就是检测是否所有的数字都已经排查完毕了*/**
cnt += fun(hashT[i]);
}
}
return cnt;
}