我的代码抛出运行时错误,有人可以解释为什么吗?我的解决方案包括将j
和i
之间的差异添加到数组中,然后找到两者的最小值,只返回它。但是由于某种原因,它给了我一个超时错误。问题是这个问题:
我们将两个数组值之间的距离定义为两个值之间的索引数。给定
A
,找到数组中任何一对相等元素之间的最小距离。如果不存在这样的值,则打印-1
最小差异由索引j
和索引i
之间的差异计算
static int minimumDistances(int[] a) {
int[] difference = new int[a.length];
int lowest = 0;
boolean pairFound = false;
for(int i = 0; i < a.length; i++) {
for(int j = i + 1; j < a.length; j++) {
for(int l = 0; l < difference.length; l++) {
if(a[i] == a[j]) {
difference[l] = j - i;
pairFound = true;
} else if(pairFound == false) {
lowest = -1;
}
}
}
}
if(pairFound == true) {
lowest = difference[0];
for(int i = 0; i < difference.length; i++) {
if(difference[i] < lowest) {
lowest = difference[i];
}
}
}
return lowest;
}
答案 0 :(得分:0)
尝试一下,看看是否可行:
int[] difference = new int[a.length];
答案 1 :(得分:0)
您循环3次,即?(n³)太慢。尝试不同的方法。 这是我使用流的代码。
static int minimumDistances(int[] a) {
Map<Integer,List<Integer>> map = IntStream.range(0, a.length).boxed()
.collect(Collectors.groupingBy(i -> a[i]));
return map.entrySet().stream().filter(m -> m.getValue().size() > 1)
.map(m -> m.getValue().stream()
.reduce((acc,val)-> Math.abs(acc - val)).get())
.mapToInt(Integer::valueOf).min().orElse(-1);
}