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

相關文章
相關標籤/搜索