HackerRank最小差异RunTimeError

时间:2018-11-23 21:20:46

标签: java

我的代码抛出运行时错误,有人可以解释为什么吗?我的解决方案包括将ji之间的差异添加到数组中,然后找到两者的最小值,只返回它。但是由于某种原因,它给了我一个超时错误。问题是这个问题:

  

我们将两个数组值之间的距离定义为两个值之间的索引数。给定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;

}

2 个答案:

答案 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);
    
}