移动零

87 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。(出自力扣)

  • 示例1
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
  • 示例2
输入: nums = [0]
输出: [0]

思路分析

  • 据题意可知,将数组里面的零都给放到数组的后面去,其他非零元素按剩下的顺序排序,并且我们需要在不复制数组的情况下对原数组进行操作。
  • 首先循环遍历一下原数组,取到每一个元素,判断取到的元素是否等于零,若是不等于零,则不操作它(不管它);若是等于零,那么就用数组的splice方法将此元素切割出来,再用数组的push方法推进数组的后面。
  • 若是数组只有一个元素,并且为零,则不需要改动。

AC代码

let nums = [1,3,0,7,9,0,7,2,0]
function moveZeroes(nums) {
    let length = nums.length - 1;
    for(let i = 0; i<length; i++) {
        if(nums[i] === 0) {
            let newNum = nums.splice(i, 1);
            nums.push(newNum[0])
        }
    }
    console.log(nums);
}
moveZeroes(nums);

总结

这是一个简单的数组运算,由于不能复制数组,只能在原数组,所以需要splice将元素取出来进行操作;复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。