假设我们有一个大小为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