Удаление из массива по заданному индексу занимает линейное время.Это потому, что вы должны сдвинуть все элементы справа от него на один пробел влево, что также занимает O (n).
Вы можете выполнить удаление в постоянное время, используя следующий трюк.Сначала поменяйте местами элемент, который вы хотите удалить, в конец массива, а затем уменьшите размер массива на один элемент, используя pop()
.
. Вы не можете реализовать такое удаление общего назначения, потому что хотямассив не отсортирован, у него все еще может быть какой-то определенный порядок, который необходимо сохранить.
Возвращаясь к проблеме: вы получили ограничение, что вы должны реализовать его на месте,без дополнительного пространства, и только один цикл.Тем не менее, это лучшее, что я могу придумать сейчас:
l = [1, 2, 3, 4, 4, 4, 4, 5, 5, 5, 6]
def removeDuplicates(l):
for i in range(len(l) - 1, 0, -1):
if (l[:i]).count(l[i]) >= 2:
del l[i]
return(l)
print(removeDuplicates(A)) #=> 8
print(l) #=> [1, 2, 3, 4, 4, 5, 5, 6]