LeetCode-283. 移动零(JavaScript)

521 阅读1分钟

题目链接:leetcode-cn.com/problems/mo…

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eaeb7342533e4364ad3e3b397cb50a6f~tplv-k3u1fbpfcp-zoom-1.image

解法:

还是快慢指针的办法

继续按照之前的套路

快指针找非 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