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

代码:
java
class Solution {
public void duplicateZeros(int[] arr) {
int n = arr.length;
int cnt0 = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == 0) {
cnt0++;
}
}
for (int j = n - 1; j >= 0; j--) {
if (arr[j] == 0) {
cnt0--;
}
if (j + cnt0 < n) {
arr[j + cnt0] = arr[j];
}
if (arr[j] == 0 && j + cnt0 + 1 < n) {
arr[j + cnt0 + 1] = 0;
}
}
}
}
性能:
时间复杂度o(n)
空间复杂度o(1)