Я обнаружил, что этот вопрос требует модификации массива на месте, чтобы все нули перемещались в конец массива и сохранялся оставшийся порядок ненулевых элементов.На месте, согласно постановке задачи, означает не делать копию исходного массива.(Это взято из Leetcode и может быть найдено как # 283, Move Zeroes)
Пример ввода и вывода будет, [0,1,0,13,12] становится [1,13,12,0,0].Я нашел одно простое решение:
for num in nums:
if num == 0:
nums.remove(num)
nums.append(0)
Решение ясное и простое в применении, поэтому я понял, что оно делает то, что должно.
Однако я не до конца понимаю / продан на месте, потому что я не уверен, как удаление работает в фоновом режиме.Делает ли внутреннее удаление копию массива для удаления указанного элемента - как это работает?Используя это понятие «на месте», считается ли мое первоначальное решение ниже на месте (поскольку оно не делает никаких копий чисел, а скорее изменяет исходную версию чисел)?
indices = []
for en, num in enumerate(nums): # get the index of all elements that are 0
if num == 0:
indices.append(en)
for en, i in enumerate(indices):
new_i = i-en # use the index, accounting for the change in length of the array from removing zeros
nums = nums[:new_i] + nums[new_i+1:] # remove the zero element
nums = nums + [0] * len(indices) # add back the appropriate number of zeros at the end