#3164
Medium Algorithms Find the number of good pairs ii
Array Hash Table
26.6% acceptance
Feb 24, 2026
253
40
You are given 2 integer arrays nums1 and nums2 of lengths n and m respectively. You are also given
a positive integer k.
A pair (i, j) is called good if nums1[i] is divisible by nums2[j] * k.
Return the total number of good pairs.
Solution
Rust
Time O(n²)
Space O(n)
impl Solution {
pub fn number_of_pairs(nums1: Vec<i32>, nums2: Vec<i32>, k: i32) -> i64 {
const MAX_VAL: usize = 1_000_001;
let mut freq1 = vec![0i64; MAX_VAL];
for &x in &nums1 {
freq1[x as usize] += 1;
}
let k = k as i64;
let mut result = 0i64;
// For each unique d = nums2[j] * k, count multiples of d in freq1
// Deduplicate nums2 with counts to avoid redundant computation
let mut freq2 = std::collections::HashMap::new();
for &y in &nums2 {
*freq2.entry(y as i64).or_insert(0i64) += 1;
}
for (y, cnt) in freq2 {
let d = y * k;
if d >= MAX_VAL as i64 {
continue;
}
let mut m = d;
while m < MAX_VAL as i64 {
result += freq1[m as usize] * cnt;
m += d;
}
}
result
}
}