Если int означает 32-разрядный целочисленный тип со знаком, сложность пространства равна O (1), поскольку вы всегда выделяете, используете и возвращаете одно и то же количество бит.
Если это это просто псевдокод и int означает целые числа, представленные в их двоичных представлениях без начальных нулей и, возможно, с дополнительным знаковым битом (представьте, что этот алгоритм выполняется вручную), анализ более сложный.
Если допускаются отрицательные значения, в лучшем случае - чередование положительных и отрицательных чисел, чтобы результат никогда не выходил за пределы постоянного размера - пробел O (1).
Если разрешен ноль, одинаково хорошим случаем является помещение нуля в весь массив. Это также O (1).
Если разрешены только положительные числа, лучший вариант сложнее. Я ожидаю, что в лучшем случае какое-то число будет повторяться n раз. В лучшем случае нам понадобится наименьшее представимое число для количества задействованных бит; Итак, я ожидаю, что число будет степенью 2. Мы можем вычислить сумму в терминах n и повторного числа:
result = n * val
result size = log(result) = log(n * val) = log(n) + log(val)
input size = n*log(val) + log(n)
По мере того, как val растет без ограничений, логарифм (val) доминирует в размере результата, а член n * log (val) доминирует во входном размере; таким образом, наилучший случай подобен мультипликативной обратной величине входного размера, а также O (1).
Наихудший случай следует иметь, выбрав val как можно меньшим (мы выбираем val = 1). и позволяя n расти без ограничений. В этом случае:
result = n
result size = log(n)
input size = 2 * log(n)
На этот раз размер результата увеличивается как половина размера ввода при увеличении n. Пространство в худшем случае является линейным.