[LeetCode] Maximum Subarray With Equal Products

3411. Maximum Subarray With Equal Products

You are given an array of positive integers nums.

An array arr is called product equivalent if prod(arr) == lcm(arr) * gcd(arr), where:

  • prod(arr) is the product of all elements of arr.
  • gcd(arr) is the GCD of all elements of arr.
  • lcm(arr) is the LCM of all elements of arr.

Return the length of the longest product equivalent subarray of nums.

A subarray is a contiguous non-empty sequence of elements within an array.

The term gcd(a, b) denotes the greatest common divisor of a and b.

The term lcm(a, b) denotes the least common multiple of a and b.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Solution {
vector<int> factors(int x) {
vector<int> res(10);
for(int i = 2; i * i <= x; i++) {
while(x % i == 0) {
res[i]++;
x /= i;
}
}
if(x != 1) res[x]++;
return res;
}
void merge(vector<int>& A, vector<int>& B, function<int(int, int)> func) {
for(int i = 0; i < A.size(); i++) A[i] = func(A[i],B[i]);
}
public:
int maxLength(vector<int>& nums) {
vector<vector<int>> ops;
for(int i = 1; i <= 10; i++) ops.push_back(factors(i));
int res = 0, n = nums.size();
auto ma = [&](int x, int y) {
return max(x,y);
};
auto mi = [&](int x, int y) {
return min(x,y);
};
auto add = [&](int x, int y) {
return x + y;
};
auto ok = [&](vector<int>& p, vector<int>& g, vector<int>& l) {
for(int i = 0; i < p.size(); i++) {
if(p[i] != g[i] + l[i]) return false;
}
return true;
};
for(int i = 0; i < n; i++) {
vector<int> p(10), g(10), l(10);
merge(p,ops[nums[i]-1],ma);
merge(g,ops[nums[i]-1],ma);
merge(l,ops[nums[i]-1],ma);
if(ok(p,g,l)) res = max(res, 1);
for(int j = i + 1; j < n; j++) {
merge(p,ops[nums[j]-1],add);
merge(g,ops[nums[j]-1],mi);
merge(l,ops[nums[j]-1],ma);
if(ok(p,g,l)) res = max(res, j - i + 1);
}
}
return res;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2025/01/05/PS/LeetCode/maximum-subarray-with-equal-products/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.