3411. Maximum Subarray With Equal Products
SourceWeekly Contest 431 Q1DifficultyEasyRating1443
Description
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 ofarr.gcd(arr)is the GCD of all elements ofarr.lcm(arr)is the LCM of all elements ofarr.
Return the length of the longest product equivalent subarray of nums.
Example 1:
Input: nums = [1,2,1,2,1,1,1]
Output: 5
Explanation:
The longest product equivalent subarray is [1, 2, 1, 1, 1], where prod([1, 2, 1, 1, 1]) = 2, gcd([1, 2, 1, 1, 1]) = 1, and lcm([1, 2, 1, 1, 1]) = 2.
Example 2:
Input: nums = [2,3,4,5,6]
Output: 3
Explanation:
The longest product equivalent subarray is [3, 4, 5].
Example 3:
Input: nums = [1,2,3,1,4,5,1]
Output: 5
Constraints:
2 <= nums.length <= 1001 <= nums[i] <= 10
Solutions
Solution 1
Thinking
The product equaling \(\gcd\cdot\operatorname{lcm}\) is an algebraic test on a subarray. With \(n\le 100\) and values \(\le 10\), we can enumerate every subarray while maintaining product, GCD, and LCM.
The product grows quickly. Once it exceeds \(\operatorname{lcm}(\textit{nums})\cdot\max(\textit{nums})\), a longer suffix cannot satisfy the identity, so the inner loop should stop.
We fix the left end \(i\), extend rightward updating \(p\), \(g\), and \(l\), record the length when \(p=g\cdot l\), and break when \(p\) is already too large.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
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 | |
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 | |
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 | |