题目:3162. 优质数对的总数 I
思路:因数+哈希表。
C++版本:
class Solution {
public:
long long numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k) {
//存储每个因数对应多少个数组nums1中的元素
unordered_map<int,int> mp;
//寻找因数
for(auto x:nums1){
//不能整除
if(x%k) continue;
x/=k;
//寻找所有可能的因数
for(int i=1;i<=x/i;i++){
if(x%i) continue;
mp[i]++;
if(i!=x/i) mp[x/i]++;
}
}
//答案
long long ans=0;
//看看nums2中的元素是否可以成为nums1中的因数
for(auto x:nums2){
ans+=mp[x];
}
return ans;
}
};
JAVA版本:
class Solution {
public int numberOfPairs(int[] nums1, int[] nums2, int k) {
//存储每个因数对应多少个数组nums1中的元素
Map<Integer,Integer> mp =new HashMap<Integer,Integer>();
//寻找因数
for(var x:nums1){
//不能整除
if(x%k!=0) continue;
x/=k;
//寻找所有可能的因数
for(int i=1;i<=x/i;i++){
if(x%i!=0) continue;
//mp.merge(i,1,Integer::sum);
mp.put(i,mp.getOrDefault(i,0)+1);
if(i!=x/i) mp.merge(x/i,1,Integer::sum);
}
}
//答案
int ans=0;
//看看nums2中的元素是否可以成为nums1中的因数
for(var x:nums2){
if(mp.containsKey(x))ans+=mp.get(x);
}
return ans;
}
}