📅  最后修改于: 2023-12-03 15:28:38.860000             🧑  作者: Mango
这是一道GATE CS 2021 |套装2中的编程问题,要求编写一个程序来实现指定任务。下面是本题的详细描述:
你需要编写一个程序来读取一个整数数组。接下来,你需要将该数组中的所有0值移动到末尾,并且将所有非零值保持相对顺序不变。你需要原地处理该数组,并且不使用任何其他数组。
输入的第一行包含一个整数n,表示数组中的元素数量。
输入的第二行包含n个整数a1,a2,a3,…,an,表示给定的数组。
输出修改后的数组,每个元素之间用空格隔开。
5
0 1 0 3 12
1 3 12 0 0
这是一道非常典型的数组操作题目。我们可以使用两个指针来实现该操作。假设我们的数组为nums,非零值的指针为p,所有值的指针为q。初始化p=q=0。然后我们遍历该数组,每次遇到一个非零值时,将其交换到nums[p]的位置,并将p+1。最后,我们将nums[p:]的所有值设为0即可。
def moveZeroes(nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
p = q = 0
while q < len(nums):
if nums[q] != 0:
nums[p], nums[q] = nums[q], nums[p]
p += 1
q += 1
nums[p:] = [0] * (len(nums) - p)
本题的解题思路和解题代码都比较简单,但需要注意的点是,在Python中,函数的参数是值传递,而非引用传递,所以我们需要将传入的nums参数声明为可变的(即List类型),才能够在函数中原地修改该数组。