1. 题目:
移动零
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
1 | 输入: [0,1,0,3,12] |
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
2. 解题:
本题要求将0
移动到数组末尾,并且要求非零相对顺序不变。实际上就是让我们将非零元素移到数组头部。
使用双指针indexZero
(记录第一个0的索引)和indexNoZero
(记录为移动的第一个非零的索引)。
当indexZero < indexNoZero
时,则将其“交换”(实际上只需要赋值,并不用真正交换);
当indexZero > indexNozero
时,不要交换,继续找下一个非零元素。
注意只有非零元素和只有零元素的情况。
代码:
1 | class Solution { |
3. 优化
1 | class Solution { |