leetcode 算法题1089 (简单287) 复写零

leetcode 算法题1089 (简单287) 复写零

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

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

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

  • 提示

1 <= arr.length <= 10000
0 <= arr[i] <= 9数组

  • 解法一
/** * @param {number[]} arr * @return {void} Do not return anything, modify arr in-place instead. */
var duplicateZeros = function(arr) {
    let i = 0, count = 0;
    while(i < arr.length) {
      if(arr[i++] === 0) {
        let j = arr.length - 1;
        while(j >= i) {
          arr[j--] = arr[j];
        }
        i++;
      }
    }
};

执行用时 : 84 ms, 在全部 JavaScript 提交中击败了94.78%的用户svg

内存消耗 : 34.9 MB, 在全部 JavaScript 提交中击败了100.00%的用户函数

  • 解法二
/** * @param {number[]} arr * @return {void} Do not return anything, modify arr in-place instead. */
var duplicateZeros = function(arr) {
    let i = 0, count = 0;
    while(i < arr.length) {
      if(arr[i++] === 0) {
        arr.pop();
        arr.splice(i++, 0, 0);
      }
    }
};

执行用时 : 80 ms, 在全部 JavaScript 提交中击败了96.79%的用户spa

内存消耗 : 35.1 MB, 在全部 JavaScript 提交中击败了100.00%的用户code