LeetCode 1089. 复写零
题目描述
思路分析
解法一:双指针从后向前写入(推荐)
核心思路:
- 统计在“扩展数组”中能写入的元素数量。
- 使用双指针从后向前写入,避免覆盖未处理元素。
- 遇到 0 时写入两次。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),原地修改。
class Solution {
public void duplicateZeros(int[] arr) {
int n = arr.length;
int i = 0;
int j = 0;
while (j < n) {
if (arr[i] == 0) {
j += 2;
} else {
j += 1;
}
i++;
}
i--;
j--;
while (i >= 0) {
if (j < n) {
arr[j] = arr[i];
}
if (arr[i] == 0) {
j--;
if (j < n) {
arr[j] = 0;
}
}
i--;
j--;
}
}
}
func duplicateZeros(arr []int) {
n := len(arr)
i, j := 0, 0
for j < n {
if arr[i] == 0 {
j += 2
} else {
j += 1
}
i++
}
i--
j--
for i >= 0 {
if j < n {
arr[j] = arr[i]
}
if arr[i] == 0 {
j--
if j < n {
arr[j] = 0
}
}
i--
j--
}
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 1089. 复写零 | 简单 | 原地数组 |
| 283. 移动零 | 简单 | 双指针 |
| 80. 删除有序数组中的重复项 II | 中等 | 双指针 |
| 26. 删除有序数组中的重复项 | 简单 | 双指针 |
| 905. 按奇偶排序数组 | 简单 | 双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!