LeetCode-1089-easy-复写0-JavaScript版

LeetCode-1089-easy-复写0-js版

题目描述

给你一个长度固定的整数数组 arr,请你将该数组中出现的每一个零都复写一遍,并将其他的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。 要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。git

示例 1:
输入:[1,0,2,3,0,4,5,0]
输出:null
解释:调用函数后,输入的数组将被修改成:[1,0,0,2,3,0,0,4]github

示例 2:
输入:[1,2,3]
输出:null
解释:调用函数后,输入的数组将被修改成:[1,2,3]数组

题解: 其实这道题就是考察最基本的数据结构中的数组的元素插入,要复写的0其实就是要插入的元素。每插入一个元素,则后面的元素都后移。bash

js中并无提供一个方法来表示这样的操做,因此咱们能够本身写一个。 以下:overWrite方法。数据结构

/**
* 实现一个 数组复写方法
* @param arr 要复写的数组
* @param index 被复写元素的位置
*/
function overWrite(arr, index){
   for(let i = arr.length - 1; i > index; i--){
       arr[i] = arr[i - 1]
   }
}
复制代码

这个方法使用举例:ide

let a = [1,2,3,4]
overWrite(a, 1)
console.log(a)
// 输出:[1,2,2,3]
复制代码

有了插入的方法,就能够解题了。 若是正序遍历,考虑到若是复写一次0,则下次被复写的那个零,要区分它是原数组的项,仍是被复写的0,比较麻烦。 因而逆序遍历最方便。函数

/**
 * @param {number[]} arr
 * @return {void} Do not return anything, modify arr in-place instead.
 */
var duplicateZeros = function(arr) {
    for(let i = arr.length - 1; i >= 0; i--){
        if (arr[i] === 0){
            overWrite(arr, i)
        }
    }
};
复制代码

执行结果

执行用时 : 120 ms , 在全部 JavaScript 提交中击败了 35.29% 的用户
内存消耗 : 34.8 MB , 在全部 JavaScript 提交中击败了 100.00% 的用户ui

本题GitHub:github.com/cunzaizhuyi…
视频讲解地址:www.bilibili.com/video/av642…spa