Вопрос Как уменьшить время выполнения алгоритма на python?

Регистрация
17 Авг 2013
Сообщения
66
Репутация
0
Спасибо
0
Монет
0
N = int(input())



h = ((input()).split(' '))



result = ''



h1 = {}



k = 0





for j in h:

if j not in h1:

h1[j] = 0

for i in h:

k += 1

h1[j] += abs(int(i) - int(j))

if k == N:

k = 0

result += str(h1[j]) + ' '



else:

result += str(h1[j]) + ' '

continue





print(result)

N - это количество чисел в строке h (например, '1 2 3 4 5'). Нужно вывести строку из N чисел, разделенных запятыми, где каждое число должно быть суммой от модуля (если в итоге получится отрицательное число) разности каждого числа из h со всеми числами из h (то есть, например, первое число в результирующей строке =

abs(1 - 1) + abs(2 - 1) + abs(3 - 1) + abs(4 -1) + abs(5 - 1), и так далее )
 
Достаточно одного цикла по массиву - если массив предварительно отсортировать (с сохранением исходного индекса элемента): n = int(input())
h = sorted([(int(v[1]), v[0]) for v in enumerate(input().split())])
res, left, right = [0] * n, 0, sum([v[0] for v in h])
for i, (v, p) in enumerate(h):
res[p] = (i * v - left) + (right - (n - i) * v)
right -= v
left += v
print(*res, sep=', ')
 
Отладкой и оптимизацией!
 
Пожалуйста имейте ввиду, что этот пользователь забанен
from collections import Counter

N = int(input())
h = list(map(int, input().split()))

counters = {i: Counter() for i in h}

for i, val in enumerate(h):
counters[val] += Counter(abs(x - val) for x in h)

result = ' '.join(str(counters[val][val]) for val in h)

print(result)
 
переписать на другой язык самый простой вариант
 
Назад
Сверху