Для заданных чисел массива напишите функцию, которая перемещает все 0 в конец массива, сохраняя при этом относительный порядок ненулевых элементов.
Обратите внимание, что массив необходимо изменять на месте, не создавая копию массива.
Этот код требует линейного времени? Если нет, то следует ли мне писать код более обычным способом, используя два указателя?
'''Recursively solve the 'Find Zero' problem without a new array created.'''
def Min_Zero(j, nums):
while nums[j] != 0 and j < len(nums)-1:
j += 1
return j
def Min_Not_Zero(i, nums):
while nums[i] == 0 and i < len(nums)-1:
i += 1
return i
# Swap the first zero element with the first non-zero element which is latter than the first zero element
def Swap_Zero(i=0, j=0, nums=[1, 2, 3, 4, 5, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 9, 0, 0]):
n = Min_Zero(j, nums)
m = Min_Not_Zero(n, nums)
if m < len(nums)-1 and n < len(nums)-1 and m > n:
nums[m], nums[n] = nums[n], nums[m]
Swap_Zero(m, n, nums = nums)
return nums
Swap_Zero()
Для заданных чисел массива напишите функцию, которая перемещает все 0 в конец массива, сохраняя при этом относительный порядок ненулевых элементов. Обратите внимание, что массив необходимо изменять на месте, не создавая копию массива.
Этот код требует линейного времени? Если нет, то следует ли мне писать код более обычным способом, используя два указателя? [code]'''Recursively solve the 'Find Zero' problem without a new array created.'''
def Min_Zero(j, nums): while nums[j] != 0 and j < len(nums)-1: j += 1 return j
def Min_Not_Zero(i, nums): while nums[i] == 0 and i < len(nums)-1: i += 1 return i
# Swap the first zero element with the first non-zero element which is latter than the first zero element def Swap_Zero(i=0, j=0, nums=[1, 2, 3, 4, 5, 0, 0, 0, 6, 0, 7, 0, 8, 0, 0, 9, 0, 0]): n = Min_Zero(j, nums) m = Min_Not_Zero(n, nums) if m < len(nums)-1 and n < len(nums)-1 and m > n: nums[m], nums[n] = nums[n], nums[m] Swap_Zero(m, n, nums = nums) return nums
Swap_Zero() [/code] Я успешно запустил код. Это проверено.