查找一个在Python中用相等乘积将数组分为两个子数组的元素

假设我们有一个大小为N的数组;我们必须找到一个将数组分成乘积相等的两个不同子数组的元素。如果没有这样的分区,则返回-1。

因此,如果输入类似于[2,5,3,2,5],则输出将为3,则子数组为:{2,5}和{2,5}

为了解决这个问题,我们将遵循以下步骤-

  • n:=数组大小

  • multiple_pref:=一个新列表

  • 在multiple_pref的末尾插入array [0]

  • 对于1到n范围内的i,执行

    • 在multipli_pref的末尾插入multiple_pref [i-1] * array [i]

  • multiple_suff:=大小为n的列表,不填充

  • 乘法_后缀[n-1]:=数组[n-1]

  • 对于范围在n-2到-1之间的i,将其减小1,

    • 乘法_后缀[i]:=乘法_后缀[i + 1] *数组[i]

  • 对于范围在1到n-1之间的i

    • 返回数组[i]

    • 如果multipli_pref [i]与multiple_suff [i]相同,则

  • 返回-1

范例程式码 

让我们看下面的实现以更好地理解-

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))

输入值

[2,5,3,2,5]

输出结果

3
猜你喜欢