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);
            }
        }
    }
};