解法:
还是快慢指针的办法
继续按照之前的套路
快指针找非 0 的,慢指针存非 0 的
快指针找到非 0 的值后,告诉慢指针存一下,慢指针存完后,往前爬一步,等待存下一个
等快指针遍历完数组以后,在数组中,慢指针索引之前的都是排序好的,慢指针索引之后(包括自己)的,都是 0,所以把之后的值都置 0
/*
* @lc app=leetcode.cn id=283 lang=javascript
*
* [283] 移动零
*/
// @lc code=start
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
if (nums.length < 1) return nums;
let slow = 0,
fast = 0;
while (fast < nums.length) {
// 快指针找到非 0 值时,告诉慢指针存一下
if (nums[fast] !== 0) {
nums[slow] = nums[fast];
// 慢指针存完后,往前走一步,准备存下一个(不一定存)
slow++;
}
fast++;
}
// 快指针遍历完数组后,nums[slow] 之前的,都是排序好的,nums[slow]之后(包括nums[slow]),都是0,所以都赋值为0
while (slow < fast) {
nums[slow] = 0;
slow++;
}
return nums;
};
// @lc code=end