283. 移动零
题目描述
题目链接:题目链接
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
输入: nums = [0]
输出: [0]
思路分析
在不改变数组非0元素的前提下,我们将0全部转移到数组后面,显然这题是经典的双指针算法,我们取一个快指针一个慢指针,利用一个循环,快指针遍历找到所有的非0元素,并通过慢指针的下标给数组进行数值更新,那么在循环结束之后,慢指针也只是更新了f - l 个元素,即该数组的0元素也就有f - l 个,基于此我们将数组的最后的f-l个元素给替换成0,那么这题也就做出来了.
代码演示
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
l = 0
f = 0
while (f < len(nums)):
if(nums[f] != 0):
nums[l] = nums[f]
l += 1
f += 1
k = f - l
for i in range(k):
i = i+1
nums[-i] = 0
return nums
结果演示
参考
https://leetcode-cn.com/problems/move-zeroes/submissions/