题目
给定一个数组 nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
1 | 输入: [0,1,0,3,12] |
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
题解
参照 LeetCode 官方题解,语言改为Python3
算法
- 设置一个slow代表慢指针。
- 用快指针遍历nums。
- 当快指针找到一个非0数后,交换快慢指针的数。
即,快指针从前向后寻找非0数,慢指针所在的数是要被修改的数。
代码
1 | class Solution: |
复杂度分析
-
时间复杂度:。
但是,操作是最优的。代码执行的总操作(数组写入)是非 0 元素的数量.
-
空间复杂度:,
只使用了常量空间。