跳到主要内容

1089.复写零

链接:1089.复写零
难度:Easy
标签:数组、双指针
简介:给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

题解 1 - typescript

  • 编辑时间:2022-03-27
  • 执行用时:76ms
  • 内存消耗:43.9MB
  • 编程语言:typescript
  • 解法介绍:统计 0 的下标。
function duplicateZeros(arr: number[]): void {
const list = new Array(arr.length)
.fill(0)
.map((_, i) => i)
.filter(v => arr[v] === 0)
.reverse();
for (const idx of list) {
arr.splice(idx, 0, 0);
arr.pop();
}
}

题解 2 - cpp

  • 编辑时间:2022-06-17
  • 执行用时:4ms
  • 内存消耗:9.3MB
  • 编程语言:cpp
  • 解法介绍:从后往前遍历。
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int n = arr.size(), p = n - 1;
auto setNum = [&](int i, int p) -> void {
if (p < n) arr[p] = arr[i];
};
for (int i = 0; i < n; i++) {
if (arr[i] == 0) p++;
}
for (int i = n - 1; i >= 0; i--, p--) {
if (arr[i] == 0) {
setNum(i, p--);
setNum(i, p);
} else {
setNum(i, p);
}
}
}
};