📌  相关文章
📜  将所有零移动到数组末尾(1)

📅  最后修改于: 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)。

方法二:使用 sort() 方法
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)。

从时间复杂度和空间复杂度两方面来看,推荐使用第一种方法,即双指针法。