Given an array, we have to report the number of subarrays such that the product of all numbers in that subarray is equal to the sum of all numbers in that subarray.
EXPLANATION:
The problem is very direct given the size of the input array. Since n \leq 50, we can directly iterate over the subarrays and calculate product and sum. The editorialist’s solution is very clear in describing the approach. Below is the pseudo-code of the same:
function get_ans(input_array[n])
{
int count = 0;
for(i = 1 to n)
{
int sum = 0, product = 1;
for(j = i down_to 1)
{
//considering all subarrays ending at i.
sum = sum + input_array[j];
product = product*input_array[j];
if(sum == product)
count = count+1;
}
}
return count;
}
Since there can’t be too many numbers greater than 1 in any such subarray (since the product grows exponentially, O(\log{sum}) at most), you can store just the numbers greater than 1 in another array and try all their subarrays - there are O(N\log{sum}) of them. For each such subarray, you know the product, which the ignored 1-s don’t change; this subarray corresponds to subarrays [a,b] in the original array, where a and b must be in some, disjoint, ranges (only up to the first integer > 1 to the left/right); the sum is a linear function of b-a and since it has to be equal to the product, any a for which we have a valid b gives one of the counted subarrays; we just need to find the range of such a-s.
For a given subarray of integers > 1, everything can be implemented in O(1), so we have O(N\log{sum}) time complexity.
Pasting a reply from Stackoverflow about what is a subarray
“I think the subarray means the array in which the contiguousness is based on the index . for example lets take an example
2 3 1 3 1 (index are 0,1,2,3,4 respectively )
so subarray is 2,3,1 3 (index 0,1,2,3) But (1,2 1) (index 2,0,4) cannot be a subarray coz the indexes are non-contiguous …”
Your example [2, 3 ,2]
The [2, 2] array has indexes 0, 2 which are non-contiguous. Therefore, it can’t be an option for subarray
this editorial isn’t completely correct,what if some random number position elements yield such type of sub-array for ex like a[o],a[3],a[9].this case i not incuded in the editorial