在 Python 中查找一个元素,该元素将数组分成两个乘积相等的子数组
server side programmingprogrammingpython
假设我们有一个大小为 N 的数组;我们必须找到一个元素,该元素将数组分成两个乘积相等的不同子数组。如果不可能进行这样的划分,则返回 -1。
因此,如果输入为 [2,5,3,2,5],则输出将为 3,然后子数组为:{2, 5} 和 {2, 5}
为了解决这个问题,我们将遵循以下步骤 −
- n := 数组大小
- multiply_pref := 一个新列表
- 在 multiply_pref 的末尾插入 array[0]
- 对于范围从 1 到 n 的 i,执行
- 在 multiply_pref 的末尾插入 multiply_pref[i-1]*array[i]
- multiply_suff := 一个大小为 n 的列表,并填充none
- multiply_suff[n-1] := array[n-1]
- 对于范围在 n-2 到 -1 内的 i,减少 1,执行
- multiply_suff[i] := multiply_suff[i+1]*array[i]
- 对于范围在 1 到 n-1 内的 i,执行
- 如果 multiply_pref[i] 与 multiply_suff[i] 相同,则
- 返回 array[i]
- 如果 multiply_pref[i] 与 multiply_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