音乐
音乐
暂未播放
0:00/0:00
暂无歌词
LeetCode | 移动零
335 字
2 分钟
LeetCode | 移动零
分类:双指针
题目#
给定一个整数数组 nums,需要把数组中的所有 0 移动到末尾,同时保持非零元素原来的相对顺序。
要求必须原地修改数组,不能复制一个新数组作为答案。
示例:
1输入: nums = [0, 1, 0, 3, 12]2输出: [1, 3, 12, 0, 0]1输入: nums = [0]2输出: [0]讲解#
这道题的关键信号是:原地修改数组,并且要保持非零元素的相对顺序。
目标数组最终会变成:
1所有非零数 + 所有 0所以我们只需要关心一件事:下一个非零数应该放在哪里。
双指针正好适合这种场景。
right 从左到右扫描数组,负责找非零数;
left 表示下一个非零数应该放到的位置。

双指针只扫描一遍数组,时间复杂度是 O(n),空间复杂度是 O(1)。
代码#
源码#
1from typing import List2class Solution:3 def moveZeroes(self, nums: List[int]) -> None:4 left = 05 for right in range(0,len(nums)):6 if(nums[right] != 0):7 nums[left],nums[right] = nums[right],nums[left]8 left+=1测试#
1from src.python._283_Move_Zeroes import Solution2
3
4sol = Solution()5
6nums = [0, 1, 0, 3, 12]7assert sol.moveZeroes(nums) is None8assert nums == [1, 3, 12, 0, 0]9
10nums = [0]11sol.moveZeroes(nums)12assert nums == [0]13
14nums = [1, 0, 1]15sol.moveZeroes(nums)16assert nums == [1, 1, 0]17
18print("PASS")参考资料#
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2026-07-31
部分内容可能已过时
相关文章智能推荐
1
LeetCode | 双指针
LeetCode整理 LeetCode 双指针题目的核心思路:用两个指针描述位置或范围,并按规则移动,涵盖移动零、盛水容器、三数之和、接雨水、最长回文子串。
2
LeetCode | 接雨水
LeetCodeLeetCode 接雨水题解:理解每个位置的左右挡板,用双指针在线性时间内计算总积水量。
3
LeetCode | 最长回文子串
LeetCodeLeetCode 最长回文子串题解:中心扩展法枚举每个奇偶中心向两侧扩展,时间复杂度 O(n²),空间复杂度 O(1)。
4
LeetCode | 盛最多水的容器
LeetCodeLeetCode 盛最多水的容器题解:使用双指针从两端向中间移动,计算能够装下的最大水量。
5
LeetCode | 矩阵置零
LeetCodeLeetCode 矩阵置零题解:使用行列标记数组记录需要清零的位置,再统一修改原矩阵。
随机文章随机推荐
暂无随机文章
评论区
分享你的想法,与大家交流讨论
--
总访问量
--
访客数
公告
音乐
音乐
暂未播放
0:00/0:00
暂无歌词
站点统计
文章
66
分类
16
标签
93
总字数
477,284
运行时长
0 天
最后活动
0 天前
最新动态



