我试图在零索引的整数数组中找到两个相等元素的索引之间的最大差异。
我的for循环目前看起来像这样,带有#34;嵌套for循环"结构体 这意味着它的时间复杂度为O(N ^ 2)。
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;
}
答案 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))。