考虑一个数组 - arr = {2, 3, 10, 6, 4, 8, 1}
我编写了代码来查找 arr[j]
和 arr[i]
之间的最大差异,使得 j > i
。在这种情况下。 10 - 2 = 8。
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int i;
for (i = 1; i < arr_size; i++)
{
if (arr[i] - min_element > max_diff)
max_diff = arr[i] - min_element;
if (arr[i] < min_element)
min_element = arr[i];
}
我还想获取导致这种差异的实际元素或其位置(在本例中为数字 10 和数字 2),因此我修改了我的代码,如下 -
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int max_element = 0;
int i;
for (i = 1; i < arr_size; i++)
{
if (arr[i] - min_element > max_diff) {
max_diff = arr[i] - min_element;
max_element = arr[i] // New Addition. This part works
}
if (arr[i] < min_element)
min_element = arr[i];
}
我能够找到最大数字(数字 10)的值,但不知道如何找到最小数字(数字 2)。 min_element
变量保存数组中最小数字的值(数字 1),而不是导致差异的最小数字。
救命!
最佳答案
如果我正确理解了这个问题,你想知道 arr[j] 和 arr[i] 的最大差异,其中 arr[j] > arr[i] 我认为问题中应该澄清的是 j > i 这样 1 就不会成为最小元素的选项。问题在于,当代码需要查找最大减法期间使用的最小数组元素时,代码会查找最小数组元素。一个简单的 boolean 值来跟踪最大减法就足够了。
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int max_element = 0;
int i;
boolean newSubtractor = false;
for (i = 1; i < arr_size; i++)
{
newSubtractor = false;
if (arr[i] - min_element > max_diff) {
max_diff = arr[i] - min_element;
max_element = arr[i] // New Addition. This part works
newSubtractor = true;
}
if (arr[i] < min_element && newSubtractor)
min_element = arr[i];
}
关于java - 在 Java 中查找数组中的最大差异以及元素的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212570/