移动零
约 265 字小于 1 分钟
移动零
相关信息
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
- 注意:必须在不复制数组的情况下 原地 对数组进行操作。
示例
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
输入: nums = [0]
输出: [0]解析
快慢指针:
- 用 index 来记录“下一个非零元素应该存放的位置”
- 遍历数组,只要遇到非零元素,就把它放到 index 的位置,同时 index++
- 遍历结束后,index 及其之后的位置全部填充为 0
代码
双次循环
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[index++] = nums[i];
}
}
for (int i = index; i < nums.length; i++) {
nums[i] = 0;
}
}
}单次循环
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
int temp = nums[i];
nums[i] = nums[index];
nums[index] = temp;
index++;
}
}
}
}