我有一个数组int [] nums = {5, 1, 6, 10, 4, 7, 3, 9, 2}
我想在O(n ^ 2)时间内找到该数组中最小和最大数字之间的距离。根据分配的要求,它需要是O(n ^ 2)时间。为此,我正在编写一个名为quadratic
的方法。到目前为止,我已经提出了下面的代码。
public static int quadratic(int[] nums) {
int max = nums[0];
int min = nums[0];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[i] > nums[j])
max = nums[i];
else if (nums[i] < nums[j])
min = nums[i];
}
}
int maxDifference = max - min;
return maxDifference;
}
问题是,当我用上面提到的数组运行该方法时,我得到的最大差值为0.我期望9,因为最大数字是10,最小数字是1. 10 - 1 = 9。
我的问题是,有人可以告诉我如何更改我的代码,以便正确计算最小和最大数字之间的最大距离吗?
答案 0 :(得分:6)
你正在覆盖最大和分钟。
if (nums[i] > nums[j])
max = nums[i];
else if (nums[i] < nums[j])
min = nums[i];
}
您需要将当前数字与已设置的最大/最小值进行比较。相反,您将当前数字与另一个数字进行比较,然后在条件为真时覆盖最大值/最小值。在此示例中,在某一点10是最大值,但之后您检查了if(9>2)
,这是真的,因此您将max = 10
更改为max = 9
。
这是在O(n ^ 2)时间内,外环完全没用。
public static int quadratic(int[] nums) {
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[j] > max)
max = nums[j];
if (nums[j] < min)
min = nums[j];
}
}
System.out.println(max + " " + min);
int maxDifference = max - min;
return maxDifference;
}
答案 1 :(得分:0)
对于数字(与平面上的点相对),您可以在线性时间内完成此操作。找到最大值,找到最小值,然后减去。因此,不需要嵌套循环。