LeetCode | 移动零

335 字
2 分钟
LeetCode | 移动零

分类:双指针

题目#

给定一个整数数组 nums,需要把数组中的所有 0 移动到末尾,同时保持非零元素原来的相对顺序。

要求必须原地修改数组,不能复制一个新数组作为答案。

示例:

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

讲解#

这道题的关键信号是:原地修改数组,并且要保持非零元素的相对顺序

目标数组最终会变成:

所有非零数 + 所有 0

所以我们只需要关心一件事:下一个非零数应该放在哪里。

双指针正好适合这种场景。

right 从左到右扫描数组,负责找非零数;

left 表示下一个非零数应该放到的位置。

移动零双指针过程
移动零双指针过程

双指针只扫描一遍数组,时间复杂度是 O(n),空间复杂度是 O(1)

代码#

源码#

from typing import List
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
left = 0
for right in range(0,len(nums)):
if(nums[right] != 0):
nums[left],nums[right] = nums[right],nums[left]
left+=1

测试#

from src.python._283_Move_Zeroes import Solution
sol = Solution()
nums = [0, 1, 0, 3, 12]
assert sol.moveZeroes(nums) is None
assert nums == [1, 3, 12, 0, 0]
nums = [0]
sol.moveZeroes(nums)
assert nums == [0]
nums = [1, 0, 1]
sol.moveZeroes(nums)
assert nums == [1, 1, 0]
print("PASS")

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

LeetCode | 移动零
https://leetcode.cn/problems/move-zeroes/
作者
平昊阳
发布于
2026-07-31
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0
最后活动
0 天前

文章目录