算法
(数学) $O(n)$
先统计一下nums
数组中有多少相同的数,然后从相同的数中任取2
个可组成一个好数对,同时把这些好数对的个数累加起来即可。
C++ 代码
class Solution {
public:
int numIdenticalPairs(vector<int>& nums) {
map<int, int> mp;
for(int x : nums) mp[x]++;
int res = 0;
for(auto [_, x] : mp) res += x * (x - 1) / 2;
return res;
}
};
Python 代码
class Solution:
def numIdenticalPairs(self, nums: List[int]) -> int:
return sum(i * (i - 1) // 2 for i in Counter(nums).values())
[_, x] 牛逼呀。这是新特性吗?
C++17 特性
https://stackoverflow.com/questions/6963894/how-to-use-range-based-for-loop-with-stdmap