前言
· 最近开始刷算法,今天把基础20题刷完,时间紧张起来了。
1512.好数对的数目
方法一:暴力统计
对于每一个ai,举所有的aj(i < j),检验是否满足ai == aj,计入答案
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
int ans = 0;
for (int i = 0; i < nums.size(); i ++) {
for(int j = i + 1; j < nums.size(); j ++) {
if (nums[i] == nums[j]) ans ++;
}
}
return ans;
}
}
这种方法的时间复杂度是O(n2),空间复杂度是O(1)。
方法二:哈希表
用哈希表统计每个数在序列出现的次数,假设数字k
在序列中出现的次数为v
,那么满足nums[i] = nums[j] =k (i < j) 的(i,j)的数量就是v(v-1)/2。
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;
}
}
时间复杂度O(n),空间复杂度O(1)。