【发布时间】:2020-06-05 08:06:18
【问题描述】:
我正在尝试以最有效的方式解决这个问题。
给定一个整数数组,不断删除三个连续相同的整数,直到数组中不再有三个连续相同的元素,并返回这些元素出现的次数。
例如 int[] {4,4,7,7,6,6,6,7,4} 将返回 3。当我们删除连续 6 的 int 数组时,变为 {4,4,7,7,7, 4} 在下一次迭代中,连续的 7 被删除,剩下 {4,4,4} 等等。
int[] {3,4,4,5,5,3} 将返回 0。
我已经尝试了十几次使用不同的集合,但有人说我的代码需要很多操作并且速度太慢。所以我只想使用数组,但我被卡住了。这是我的代码:
public static int getNumberOfRepetitions(int[] arr) {
int[] arr2 = new int[arr.length];
int counter= 0;
int index = 0;
for (int x= 0;x<arr.length;x++) {
if (x < arr.length - 2) {
if (arr[x] == arr[x + 2] && arr[x] == arr[x + 2]) {
counter++;
x = x + 2;
continue;
}
arr2[index] = arr[x];
index++;
}
if (x < arr.length - counter * 3) {
arr = arr2;
arr2 = new int[arr.length];
index = 0;
x = -1;
}
}
return counter;
}
算法迭代一个数组并将项目添加到第二个数组,如果有连续的元素,它会添加到一个计数器并跳过它们。在最后一次迭代中,arr 设置为 arr2 并且 for 循环应该重置。
到目前为止,我无法弄清楚如何终止代码,所以我得到了一个无限循环。我是编程新手,不胜感激。
【问题讨论】:
-
"当我们移除连续6的int数组时变成{4,4,7,7,7,4}"为什么最后7和4交换了位置?应该是
{4,4,7,7,4,7},不是吗? -
@kaya3 是的,你是对的,我的错。
-
这里的逻辑运算对我来说没有意义:if (arr[x] == arr[x + 2] && arr[x] == arr[x + 2])。请检查您是否有错字。
标签: java arrays algorithm loops for-loop