"嵌套for循环的时间复杂度优化"方法

时间:2017-11-26 11:01:44

标签: java for-loop

我试图在零索引的整数数组中找到两个相等元素的索引之间的最大差异。

我的for循环目前看起来像这样,带有#34;嵌套for循环"结构体 这意味着它的时间复杂度为O(N ^ 2)。

是否可以将其时间复杂度降低到O(N * log(N))或更低?

public static Integer solution(Integer[] arr) {
    Integer l = arr.length;
    int result = 0;
    for (int i = 0; i < l; i++) {
        for (int j = 0; j < l; j++) {
            if (arr[i] == arr[j]) {
                result = Math.max(result, Math.abs(i - j));
            }
        }
    }
    return result;
}

1 个答案:

答案 0 :(得分:1)

我假设您正在尝试在数组中找到两个相等数字索引的最大差异。您不需要在整个阵列中运行2次。内环可以简单地在i结束,这将大大降低复杂性。

public static int solution(int[] arr) {
  int l = arr.length;
  int result = 0;
  for (int i = 0; i < l; i++) {
    for (int j = 0; j < i; j++) {
    if (arr[i] == arr[j]) {
        result = Math.max(result, Math.abs(i - j));
    }
    }
  }
  return result;
}

复杂性应该是O(N * log(N))。