Find an element which divides the array in two subarrays with equal product in Python


Suppose we have an array of size N; we have to find an element which divides the array into two different sub-arrays with equal product. Return -1 if no such partition is possible.

So, if the input is like [2,5,3,2,5], then the output will be 3 then subarrays are: {2, 5} and {2, 5}

To solve this, we will follow these steps −

  • n := size of array
  • multiply_pref := a new list
  • insert array[0] at the end of multiply_pref
  • for i in range 1 to n, do
    • insert multiply_pref[i-1]*array[i] at the end of multiply_pref
  • multiply_suff := a list of size n, and fill with none
  • multiply_suff[n-1] := array[n-1]
  • for i in range n-2 to -1, decrease by 1, do
    • multiply_suff[i] := multiply_suff[i+1]*array[i]
  • for i in range 1 to n-1, do
    • if multiply_pref[i] is same as multiply_suff[i], then
      • return array[i]
  • return -1

Example Code 

Let us see the following implementation to get better understanding −

 Live Demo

def search_elem(array):
   n = len(array)
   multiply_pref = []
   multiply_pref.append(array[0])
   for i in range(1, n):
      multiply_pref.append(multiply_pref[i-1]*array[i])
   multiply_suff = [None for i in range(0, n)]
   multiply_suff[n-1] = array[n-1]
   for i in range(n-2, -1, -1):
      multiply_suff[i] = multiply_suff[i+1]*array[i]
   for i in range(1, n-1):
      if multiply_pref[i] == multiply_suff[i]:
         return array[i]
   return -1
array = [2,5,3,2,5]
print(search_elem(array))

Input

[2,5,3,2,5]

Output

3

Updated on: 28-Aug-2020

89 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements