Skip to content

Commit 4a6f0fa

Browse files
committed
1577. Number of Ways Where Square of Number Is Equal to Product of Two Numbers: AC
1 parent d8e9106 commit 4a6f0fa

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed

src/solution/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1189,3 +1189,4 @@ mod s1573_number_of_ways_to_split_a_string;
11891189
mod s1574_shortest_subarray_to_be_removed_to_make_array_sorted;
11901190
mod s1575_count_all_possible_routes;
11911191
mod s1576_replace_all_s_to_avoid_consecutive_repeating_characters;
1192+
mod s1577_number_of_ways_where_square_of_number_is_equal_to_product_of_two_numbers;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/**
2+
* [1577] Number of Ways Where Square of Number Is Equal to Product of Two Numbers
3+
*
4+
* Given two arrays of integers nums1 and nums2, return the number of triplets formed (type 1 and type 2) under the following rules:
5+
*
6+
* Type 1: Triplet (i, j, k) if nums1[i]^2 == nums2[j] * nums2[k] where 0 <= i < nums1.length and 0 <= j < k < nums2.length.
7+
* Type 2: Triplet (i, j, k) if nums2[i]^2 == nums1[j] * nums1[k] where 0 <= i < nums2.length and 0 <= j < k < nums1.length.
8+
*
9+
*
10+
* Example 1:
11+
*
12+
* Input: nums1 = [7,4], nums2 = [5,2,8,9]
13+
* Output: 1
14+
* Explanation: Type 1: (1, 1, 2), nums1[1]^2 = nums2[1] * nums2[2]. (4^2 = 2 * 8).
15+
*
16+
* Example 2:
17+
*
18+
* Input: nums1 = [1,1], nums2 = [1,1,1]
19+
* Output: 9
20+
* Explanation: All Triplets are valid, because 1^2 = 1 * 1.
21+
* Type 1: (0,0,1), (0,0,2), (0,1,2), (1,0,1), (1,0,2), (1,1,2). nums1[i]^2 = nums2[j] * nums2[k].
22+
* Type 2: (0,0,1), (1,0,1), (2,0,1). nums2[i]^2 = nums1[j] * nums1[k].
23+
*
24+
* Example 3:
25+
*
26+
* Input: nums1 = [7,7,8,3], nums2 = [1,2,9,7]
27+
* Output: 2
28+
* Explanation: There are 2 valid triplets.
29+
* Type 1: (3,0,2). nums1[3]^2 = nums2[0] * nums2[2].
30+
* Type 2: (3,0,1). nums2[3]^2 = nums1[0] * nums1[1].
31+
*
32+
*
33+
* Constraints:
34+
*
35+
* 1 <= nums1.length, nums2.length <= 1000
36+
* 1 <= nums1[i], nums2[i] <= 10^5
37+
*
38+
*/
39+
pub struct Solution {}
40+
41+
// problem: https://leetcode.com/problems/number-of-ways-where-square-of-number-is-equal-to-product-of-two-numbers/
42+
// discuss: https://leetcode.com/problems/number-of-ways-where-square-of-number-is-equal-to-product-of-two-numbers/discuss/?currentPage=1&orderBy=most_votes&query=
43+
44+
// submission codes start here
45+
46+
impl Solution {
47+
pub fn num_triplets(nums1: Vec<i32>, nums2: Vec<i32>) -> i32 {
48+
let mut result = 0;
49+
50+
let (mut m1, mut m2) = (
51+
std::collections::HashMap::new(),
52+
std::collections::HashMap::new(),
53+
);
54+
55+
for i in 0..nums1.len() {
56+
for j in i + 1..nums1.len() {
57+
let p = nums1[i] as i64 * nums1[j] as i64;
58+
*m1.entry(p).or_insert(0) += 1;
59+
}
60+
}
61+
62+
for i in 0..nums2.len() {
63+
for j in i + 1..nums2.len() {
64+
let p = nums2[i] as i64 * nums2[j] as i64;
65+
*m2.entry(p).or_insert(0) += 1;
66+
}
67+
}
68+
69+
for &num in nums1.iter() {
70+
if let Some(&v) = m2.get(&(num as i64 * num as i64)) {
71+
result += v;
72+
}
73+
}
74+
75+
for &num in nums2.iter() {
76+
if let Some(&v) = m1.get(&(num as i64 * num as i64)) {
77+
result += v;
78+
}
79+
}
80+
81+
result
82+
}
83+
}
84+
85+
// submission codes end
86+
87+
#[cfg(test)]
88+
mod tests {
89+
use super::*;
90+
91+
#[test]
92+
fn test_1577_example_1() {
93+
let nums1 = vec![7, 4];
94+
let nums2 = vec![5, 2, 8, 9];
95+
96+
let result = 1;
97+
98+
assert_eq!(Solution::num_triplets(nums1, nums2), result);
99+
}
100+
101+
#[test]
102+
fn test_1577_example_2() {
103+
let nums1 = vec![1, 1];
104+
let nums2 = vec![1, 1, 1];
105+
106+
let result = 9;
107+
108+
assert_eq!(Solution::num_triplets(nums1, nums2), result);
109+
}
110+
111+
#[test]
112+
fn test_1577_example_3() {
113+
let nums1 = vec![7, 7, 8, 3];
114+
let nums2 = vec![1, 2, 9, 7];
115+
116+
let result = 2;
117+
118+
assert_eq!(Solution::num_triplets(nums1, nums2), result);
119+
}
120+
}

0 commit comments

Comments
 (0)