283. 移动零

  • 题目

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

  • 代码
    • splice+push
function moveZeroes(arr) {
  let count = 0; //用count来防止死循环
  for (let i = 0; i < arr.length - count; i++) {
    while (arr[i] === 0) { //一直对i=1判断,直到它的值不是0     //优先遍历完while循环 ,拿到最终的count 跳出for循环换。不能用if,if只能取到当前count. 反例【0,0,1】     
      arr.splice(i, 1);
      arr.push(0);
      count++;
    }
  }
  return arr;
}

  • 快慢指针
var moveZeroes = function (nums) {
  var n = nums.length
  var k = 0//慢指针
  for (let i = 0; i < n; i++) {
    if (nums[i] != 0) {
      nums[k] = nums[i]//k从头慢慢放不为0的数
      k++
    }
  }
  for (let i = k; i < n; i++) {
    nums[i] = 0 //剩下的置为0
  }
  return nums
};

posted @ 2022-10-05 23:25  衣囧~  阅读(16)  评论(0编辑  收藏  举报