Мне было интересно, как я мог бы уменьшить временную сложность этого алгоритма. Он вычисляет длину максимального подмассива с элементами, которые суммируются с целым числом k.Сокращение временной сложности смежного подмассива
а = массив целых чисел
к = макс целого
например: а = [1,2,3], к = 3
возможных подмассивы = [1], [1 , 2]
длина макс подмассива = 2
sys.setrecursionlimit(20000)
def maxLength(a, k):
#a = [1,2,3]
#k = 4
current_highest = 0
no_bigger = len(a)-1
for i in xrange(len(a)): #0 in [0,1,2]
current_sum = a[i]
sub_total = 1
for j in xrange(len(a)):
if current_sum <= k and ((i+sub_total)<=no_bigger) and (k>=(current_sum + a[i+sub_total])):
current_sum += a[i+sub_total]
sub_total += 1
else:
break
if sub_total > current_highest:
current_highest = sub_total
return current_highest
формулировка Вопрос плохо, содержит противоречия, например, не ясно. – MBo
Что вы подразумеваете подмассивом? Максимальная длина или что? –
Подсказка: если числа не могут быть отрицательными, найдите частичные суммы для партнеров. –