给你一个长度固定的整数数组 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