📜  算法|算法分析|问题18(1)

📅  最后修改于: 2023-12-03 15:41:09.565000             🧑  作者: Mango

算法分析:问题18

问题描述

给定一个数组 nums,编写一个函数将所有 0 移动到其末尾,同时保持非零元素的相对顺序。

示例:

输入:[0,1,0,3,12] 输出:[1,3,12,0,0]

解决思路

我们可以使用双指针法来解决这个问题。让其中一个指针遍历整个数组,另一个指针记录下当前已经遍历过的非零元素的个数,然后将当前遍历到的非零元素放到记录指针的位置上,并将记录指针向前移动一位。

def moveZeroes(nums):
    """
    :type nums: List[int]
    :rtype: void Do not return anything, modify nums in-place instead.
    """
    n = len(nums)
    j = 0
    for i in range(n):
        if nums[i] != 0:
            nums[j] = nums[i]
            j += 1
    for i in range(j, n):
        nums[i] = 0
时间复杂度分析

该算法只对数组进行一次遍历,因此时间复杂度为O(n)。

空间复杂度分析

该算法只使用了两个指针和一个常量空间,因此空间复杂度为O(1)。

总结

本题考察了数组的基础操作和双指针法,需要程序员能够灵活运用。