移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。
function moveZero(arr = [0,1,3,5,0,3,0,6,8]){
    for(let i = arr.length -1;i > -1;i--){
        let item = arr[i]
        if(item === 0){
            arr = arr.concat(arr.splice(i,1))
        }
    }
    return arr
}

  快慢指针

const moveZeroes = (nums = [0, 1, 0, 3, 12]) => {
    let slow = -1
    for (let i = 0; i < nums.length; i++) {
        const v = nums[i]
        if (v === 0) {
            if (slow === -1) slow = i
            continue
        }
        if (slow > -1) {
            [nums[slow], nums[i]] = [nums[i], nums[slow]]
            slow++
        }
    }
    return nums
};

  

posted @ 2020-10-09 21:46  671_MrSix  阅读(61)  评论(0编辑  收藏  举报