📅  最后修改于: 2023-12-03 15:23:38.291000             🧑  作者: Mango
在处理数组时,经常需要将数组中的零移动到开始或者结尾位置,这里给出两种常用的方法。
定义两个指针left
和right
,分别指向数组的开始和结束位置。当left
指向的元素为零时,right
开始向后遍历,直到找到第一个非零元素,然后交换两者。这样就将一个零移动到了结尾位置。重复进行这个过程,直到right
走到数组的结尾位置,此时所有的零都已经被移动到了结尾。
接下来将left
指针向后移动一个位置,重复上述的操作,将下一个零移到结尾。重复这个过程,直到left
指针移动到数组的结尾位置,整个数组中所有的零都已经被移到了结尾。
def move_zeros(nums):
left, right = 0, len(nums) - 1
while left < right:
while left < right and nums[left] != 0:
left += 1
while left < right and nums[right] == 0:
right -= 1
nums[left], nums[right] = nums[right], nums[left]
return nums
从数组的开头开始遍历,当遇到一个零时,从当前位置开始向后查找,直到找到第一个非零元素,交换两者。这样就将一个零移动到了结尾位置。重复进行这个过程,直到结束位置。
def move_zeros(nums):
for i in range(len(nums)):
if nums[i] == 0:
j = i + 1
while j < len(nums) and nums[j] == 0:
j += 1
if j == len(nums):
break
nums[i], nums[j] = nums[j], nums[i]
return nums
上述两种方法的时间复杂度均为O(n),其中方法一的空间复杂度为O(1),方法二的空间复杂度为O(n)。在实际应用中,应该根据实际情况选择适合的方法。