https://leetcode-cn.com/problems/move-zeroes/
点击查看【bilibili】

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

    示例

    1. 输入: [0,1,0,3,12]
    2. 输出: [1,3,12,0,0]

    解答

    相对顺序就是指,只考虑整体中的几个元素,它们的先后顺序,而不管它们在整体中的顺序。
    image.png
    image.png
    创建两个指针:
    i指针表示当前数
    j指针表示应该在哪个位置放个非零数
    遍历数组,i++,
    如果当前数是非零数,j位置放这个非零数,j++
    否则i++,j什么都不做
    当i遍历完以后,从j当前的位置,到数组末尾,所有数都为0

    答案

    var moveZeroes = function(nums) {
    let j=0;
    for(let i=0;i<nums.length;i++) {
     if(nums[i] !==0) {
       nums[j] = nums[i]
       j++
     }
    }
    
    for(let i=j;i<nums.length;i++) {
     nums[i] = 0
    }
    return nums
    };