gpt4 book ai didi

java - 通过修改数组在数组中复制零

转载 作者:行者123 更新时间:2023-12-04 14:33:58 26 4
gpt4 key购买 nike

There is a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remaining elements to the right. The elements beyond the length of the original array are not written.


我们必须就地修改输入数组,而不必创建新数组。
所以我创建了它,但它复制了数组末尾的零,而不是之前的零。有人可以帮我解决这个问题吗?
public static void addPos() {
int arr[] = { 1, 2, 0, 3, 0, 5, 0, 7, 8 };
int result[] = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 0) {
int loc = i;
for (int j = 0; j < loc; j++) {
result[j] = arr[j];
result[loc] = 0;
}
for (int j = loc + 1; j < arr.length; j++) {
result[j] = arr[j - 1];
}
}
}
for (int k = 0; k < arr.length; k++)
System.out.println(result[k]);
}
输出
1
2
0
3
0
5
0
0
7
Expected output:
1
2
0
0
3
0
0
5
0

最佳答案

循环的每次迭代都会覆盖上一次迭代的结果,因此最终结果只显示上次迭代的结果,即重复了最后一次 0 的重复。
解决这个问题的一种方法是“从右到左”向后迭代。它简化了很多事情。可以去掉辅助result大批。基本思想是,在数组中倒退,每次找到 0 时,通过将数组重写到 0 的右侧来复制它。

public static void addPos() {
int arr[] = {1, 2, 0, 3, 0, 5, 0, 7, 8};

for (int i = arr.length - 1; i >= 0; i--) {
if (arr[i] == 0) {
// duplicate it!
for (int j = arr.length - 1; j > i; j--) {
arr[j] = arr[j-1];
}
}
}

for (int k = 0; k < arr.length; k++) {
System.out.println(arr[k]);
}
}

关于java - 通过修改数组在数组中复制零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63378939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com