文章目录
- 1. 优质数对的总数 II
1. 优质数对的总数 II
题目链接
- 🍎该题涉及的小技巧:🐥
🐧①一次可以统计这个数的== 两个因子==
但是要注意 25 = 5 * 5,这种情况 5 只能统计一次噢🆒
- 解题思路:
🐧① 题目的意思可以转换成求nums1
中有多少个数可以整除nums2 * k
的数;
🐧② 我们先把nums1
的因子都求出来,因为要整除nums2 * k
,nums1
肯定有因子是在nums2
中才能整除
🐧③ 把nums1
的所有因子用哈希表存起来即可;
- 代码实现
class Solution {
public:long long numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k) {unordered_map<int, int> counts;// 1.先统计 nums1 的因子for (auto x : nums1){if (x % k != 0)continue;for (int d = 1; d * d <= x; d ++){if (x % d != 0)continue;counts[d]++;// 一次统计两个因子 例如: 12 的因子是 2 和 6if (d * d < x){counts[x / d] ++;}}}long long ans = 0;for (int x : nums2)ans += counts[x * k];return ans; }
};