难度:简单

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

    示例:

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

    说明:
    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。

    解题思路:

    1. 利用双指针,遍历数组,当前元素值为0,位置移动后右指针前移,当前元素不为0时,左指针前移

    代码实现:

    var moveZeroes = function(data) {
          let i = 0;
          let j = data.length;
          while (i < j) {
            if (data[i] === 0) {
              data.splice(i, 1);
              data.push(0);
              j--;
            }
            if (data[i] !== 0) {
              i++;
            }
          }
          return data;
    };
    
    1. 双指针,i用来遍历数组,j表示最后一个0的下标
    • 当i 遇到 0时,i++
    • 当i 不是 0 时,j+1,如果j<i,nums[j] = nums[i], nums[i] =0
      var moveZeroes = function(nums) {
        let i = 0, j=0
        while(i < nums.length){
            if (nums[i] != 0){
                if (j < i){
                    nums[j] = nums[i]
                    nums[i] = 0
                }
                j++
            }
            i++
        }
        return nums
      };