给定两个具有相同长度的列表(A,B),我如何找到使max(sum(A [:i],B [i:]),sum(A [i:],B [:i]))最小?

时间:2019-05-31 06:41:08

标签: python-3.6

我正在研究在线挑战问题,可以用蛮力解决此问题,但是当长度变得很大时,运行时间将大大增加,我相信必须有更好的算法来解决此问题,但是这只是我无法控制的。我感谢任何很棒的主意。

1 个答案:

答案 0 :(得分:0)

如果允许您使用numpy,则可以使用numpy.cumsum方法来查找存储区sum(A[:i])sum(A[i:])sum(B[:i])和{{1} }在四个不同数组中的值,如下所示

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:])