Giả sử chúng ta có một mảng kích thước N; chúng ta phải tìm một phần tử chia mảng thành hai mảng con khác nhau có tích bằng nhau. Trả về -1 nếu không có phân vùng như vậy.
Vì vậy, nếu đầu vào giống như [2,5,3,2,5], thì đầu ra sẽ là 3 thì các mảng con là:{2, 5} và {2, 5}
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- n:=kích thước của mảng
- multi_pref:=một danh sách mới
- chèn mảng [0] vào cuối Multi_pref
- đối với tôi trong phạm vi từ 1 đến n, thực hiện
- chèn Multi_pref [i-1] * mảng [i] vào cuối Multi_pref
- multi_suff:=một danh sách có kích thước n và không điền vào
- multi_suff [n-1]:=array [n-1]
- đối với tôi trong phạm vi n-2 đến -1, giảm đi 1, thực hiện
- multi_suff [i]:=Multi_suff [i + 1] * array [i]
- đối với tôi trong phạm vi từ 1 đến n-1, hãy thực hiện
- nếu Multi_pref [i] giống như Multi_suff [i], thì
- trả về mảng [i]
- nếu Multi_pref [i] giống như Multi_suff [i], thì
- trả về -1
Mã mẫu
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
[2,5,3,2,5]
Đầu ra
3