Я работаю над проблемой онлайн-вызова, и я могу решить эту проблему с помощью грубой силы, но когда длина стала очень большой, время выполнения значительно увеличилось, я считаю, что должен быть лучший алгоритм для решения этой проблемы, но это просто из моей руки. Я ценю любые блестящие идеи.
Если вам разрешено использовать numpy
, с помощью метода numpy.cumsum
вы можете найти значения store sum(A[:i])
, sum(A[i:])
, sum(B[:i])
и sum(B[i:])
в четырех разных массивах следующим образом.
import numpy as np
A = [] # Array A
B = [] # Array B
A_start_to_i = np.cumsum(A) # A_start_to_i[i] = sum(A[:i])
A.reverse() # Reverse the order
A_i_to_end = np.cumsum(A) # A_i_to_end[i] = sum(A[i:])
B_start_to_i = np.cumsum(B) # B_start_to_i[i] = sum(B[:i])
B.reverse() # Reverse the order
B_i_to_end = np.cumsum(B) # B_i_to_end = sum(B[i:])
Теперь все, что вам нужно сделать, это создать sum(A[:i], B[i:])
и sum(B[:i], A[i:])
и найти индекс с минимальным элементом.
first_array = A_start_to_i + B_i_to_end # first_array[i] = sum(A[:i], B[i:])
second_array = A_i_to_end + B_start_to_i # second_array[i] = sum(B[:i], A[i:])
# Find which array has the minimum element
idx = np.argmin([min(first_array), min(second_array)])
if idx == 0:
# First array has the minimum element
i = np.argmin(first_array)
else:
# Second array has the minimum element
i = np.argmin(second_array)
Пожалуйста, добавьте код, который вы уже написали. Легче давать предложения, увидев код.