📅  最后修改于: 2023-12-03 15:25:18.866000             🧑  作者: Mango
有时候我们需要对数组进行操作,例如将所有零移动到数组末尾。下面我们就来探讨一下具体的实现方法。
def moveZeroes(nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
left, right = 0, 0 # 定义两个指针,分别指向数组开头
while right < len(nums):
if nums[right] != 0: # 如果右指针指向的值不是0
nums[left], nums[right] = nums[right], nums[left] # 将该值和左指针指向的值交换
left += 1 # 左指针向右移动一格
right += 1 # 右指针向右移动一格
return nums
该方法的时间复杂度为 O(n),其中 n 为数组长度。由于只需要对数组进行一次遍历,因此空间复杂度为 O(1)。
def moveZeroes(nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
nums.sort(key=lambda x: x == 0) # 将数组中的 0 值交换到末尾
return nums
该方法使用了 sort() 方法进行排序,由于排序算法的实现方法不一样,因此时间复杂度可能会有所不同,但都为 O(nlogn) 或 O(n^2)。由于只需要对数组进行一次操作,因此空间复杂度为 O(1)。
从时间复杂度和空间复杂度两方面来看,推荐使用第一种方法,即双指针法。