Вы не указали какой-либо языковой тег, поэтому я отвечу, используя python (только потому, что сейчас я использую его быстрее).
Если вы только заботитесь о сложности пространства, вы можете сделать что-то вроде этого:
l = [1, 4, 8, 3, 9, 12, 7]
even_index = -1
for index in range(0, len(l)):
if (l[index] % 2) == 0:
if even_index == -1:
even_index = index
else:
if (index > 0) and (even_index > -1):
num = l[index]
l.insert(even_index, num)
del l[index + 1]
even_index += 1
print(l)
Вы сохраняете указатель того, где находится первое четное число, и вставляете нечетное число, когда вы находите их, проходя через список. Затем вы удаляете нечетное число по «старому» индексу (который теперь увеличивается на 1).
Я думаю, вам нужна космическая сложность, но временная сложность может быть улучшена.
Например, в Python collections.deque
, вероятно, лучше в этом случае, но сложность времени не была приоритетом.