「每日LeetCode」2022年6月17日

本文最后更新于:2023年3月19日 晚上

1089.复写零

1089.复写零

Category Difficulty Likes Dislikes
algorithms Easy (58.16%) 178 -

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

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

提示:

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

Discussion | Solution

思路

按题意模拟即可,每次遇到 0,将当前下一位后的所有数往后移一位,并将下一位设为 0.

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @lc app=leetcode.cn id=1089 lang=javascript
*
* [1089] 复写零
*/

// @lc code=start
/**
* @param {number[]} arr
* @return {void} Do not return anything, modify arr in-place instead.
*/
var duplicateZeros = function (arr) {
for (let i = 0; i < arr.length; i++) {
const num = arr[i];
if (num === 0) {
for (let j = arr.length - 1; j > i && j >= 2; j--) {
[arr[j], arr[j - 1]] = [arr[j - 1], arr[j - 2]];
}
arr[i] = 0;
i++;
}
}
};