Я проверил ваш представленный алгоритм, и проблема в том, что ваша stringToList
функция:
def stringToList(s):
list=[]
for elem in s:
if elem != " ":
list.append(int(elem))
return list
Насколько я могу судить, ваш основной алгоритм полностью в порядке, но stringToList
делает одну важную вещь неправильно:
>>> stringToList('2 4 6 8 10')
[2, 4, 6, 8, 1, 0]
# should be
[2, 4, 6, 8, 10]
Поскольку каждый символ обрабатывается индивидуально, две цифры 10
превращаются в 1, 0
. Более простой способ, который работает правильно, заключается в следующем:
# explanation
>>> input()
'2 4 6 8 10'
>>> input().split(' ')
['2', '4', '6', '8', '10']
>>> map(int, input().split(' ')) # applies the int function to all elements
<map object at 0x...>
>>> list(map(int, input().split(' '))) # converts map object into list
[2, 4, 6, 8, 10]
Извините, что так долго, я закончил делать свой собственный алгоритм для сравнения с вашим, запустил свои собственные тесты, а затем запустил ваш код с помощью метода ввода в список, который я только что объяснил, и понял, что единственная разница заключается в вашей функции stringToList
. Это заняло некоторое время, но я надеюсь, что это поможет!
Просто для удовольствия, вот мой алгоритм, и оказалось, что он очень похож на ваш!
array = [1, 3, 2, 1, 4]
n = len(array)
slice = [0, n]
sum = [array[0], 0]
bestSum = 0
while slice[0] < slice[1]-1:
i = 0 if (sum[0] < sum[1]) else 1
slice[i] += 1-(2*i)
sum[i] += array[slice[i]]
if sum[0] == sum[1]: bestSum = sum[0]
# print(array[ : slice[0]+1], array[slice[0]+1 : slice[1]], array[slice[1] : ])
print(bestSum)