题目描述
- 给定一个数组
nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
- 请注意 ,必须在不复制数组的情况下原地对数组进行操作
解题思路
- 双指针(快慢指针)
- 遇到非零元素做处理,等于零的元素不做处理
- 以下两种解法只是有细微的差别
解题代码(JavaScript)
var moveZeroes = function (nums) {
let len = nums.length;
let slow = 0;
let fast = 0;
while (fast < len) {
if (nums[fast] === 0) {
fast++;
} else {
nums[slow++] = nums[fast++];
}
}
for (let j = slow; j < len; j++) {
nums[j] = 0;
}
return nums;
};
var moveZeroes = function (nums) {
let len = nums.length;
let slow = 0;
let fast = 0;
let temp = "";
while (fast < len) {
if (nums[fast] !== 0) {
temp = nums[fast];
nums[fast] = nums[slow];
nums[slow] = temp;
slow++;
}
fast++;
}
return nums;
};