查找一个在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