gpt4 book ai didi

java - 如何返回数组中匹配数字之间的最小距离?

转载 作者:行者123 更新时间:2023-12-02 01:18:36 25 4
gpt4 key购买 nike

我试图找到未排序数组中两个匹配数字之间的最小距离。如果无法找到匹配项,则返回 -1。我使用的数组 int[] array = {5, 3, 4, 2, 3, 4, 5, 7};

我尝试了两个 for 循环和两个辅助方法,将第一个元素与数组中的其他元素进行比较,并将计数器变量增加一,直到达到匹配。然后,我将计数器与最小值进行比较,将其设置为可能的最高整数。我不知道为什么它不起作用。对于此示例,它应该返回 4。

int[] array = {5, 3, 4, 2, 3, 4, 5, 7};

int counter = 0;
int min = Integer.MAX_VALUE;
if(hasDuplicates(array)) {
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if(array[i] != array[j]){
counter++;
}
}
min = min(counter, min);
counter = 0;
}

System.out.println(min);
} else {
System.out.println("-1");
}
}

public static boolean hasDuplicates(int[] array) {
boolean isDuplicates = false;
Set<Integer> duplicates = new HashSet<Integer>();
for (int element : array){
if(duplicates.contains(element)) {
isDuplicates = true;
}
duplicates.add(element);
}
return isDuplicates;
}

public static int min(int a, int b){
if (a >b){
return a;
} else {
return b;
}
}

我预计这个方法的输出是4,但是这段代码的实际输出是2147483647。

最佳答案

好吧,我刚刚知道问题出在哪里了。

在原始代码中,如果两个数字不匹配,您不应该尝试使用计数器来帮助找出距离。相反,如果两者匹配,您可以尝试直接计算距离。

代码如下:

public void find() {

int[] array = {5, 3, 4, 2, 3, 4, 5, 7};

//int counter = 0;
int min = Integer.MAX_VALUE;
if(hasDuplicates(array)) {
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
/*if(array[i] != array[j]){
counter++;
}*/
if(array[i] == array[j]){
min = Math.min(min, j - i);
}
}
//min = min(counter, min);
/*if (counter > 0)
min = Math.min(counter, min);
counter = 0;*/
}

System.out.println(min);
} else {
System.out.println("-1");
}
}

然后你会得到3

关于java - 如何返回数组中匹配数字之间的最小距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151399/

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