Первый цикл
for i in array:
count[i] += 1
занимает n итераций, для второго цикла количество инструкций
выполняется в худшем случае для понимания списка:
i for j in range(count[i]) #
равно count[i]
, а сумма всех count[i]
равна n.
Обратите внимание, что сравнение
if count[i] != 0:
выполняется k раз, а в худшем случае
sorted +=...
также делается k-раз. Сложив все это, вы получите свой O (n + k)
(при условии, что + = для sorted
- это постоянные затраты, в противном случае мы должны сказать, что + = является амортизированной константой, и поэтому результат приходит с этим предупреждением).