Я работаю над довольно простым вопросом, чтобы убедиться, что я понимаю эти понятия.
Вопрос в том, что существует массив A из n элементов: RED, WHITE или BLUE. Переставьте массив таким образом, чтобы все элементы WHITE были перед всеми элементами BLUE, а все элементы BLUE - перед всеми элементами RED. Построить алгоритм в O (n) времени и O (1) пространстве.
Насколько я понимаю, псевдокод для решения будет:
numW = numB = 0
for i = 0 to n:
if ARRAY[i] == WHITE:
numW++
else if ARRAY[i] == BLUE:
numB++
for i = 0 to n:
if numW > 0:
ARRAY[i] = WHITE
numW--
else if numB > 0:
ARRAY[i] = BLUE
numB--
else:
ARRAY[i] = RED
Я считаю, что это O (n), потому что он проходит через цикл дважды, а O (2n) находится в O (n). Я полагаю, что пространство равно O (1), потому что оно не зависит от общего количества элементов, то есть всегда будет счет для каждого
Правильно ли мое понимание?