考虑一个数组-arr = {2, 3, 10, 6, 4, 8, 1}
我编写了代码,以找出arr[j]
和arr[i]
之间的最大差异。在这种情况下。 10-2 = 8。
j > i
我还想获得导致这种差异的实际元素或其位置(在这种情况下为10和2),所以我将代码修改如下-
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];
}
变量保存数组中最小数字(数字1)的值,而不是导致差值的最小数字。
帮助!
答案 0 :(得分:1)
如果我正确地理解了问题,那么您想知道arr [j]和arr [i]的最大差值,其中arr [j]> arr [i],我认为应该澄清的是j > i,因此min元素将不会选择1。问题在于,当代码需要找到最大减法期间使用的最小数组元素时,代码会找到最小数组元素。一个简单的布尔值即可跟踪最大减法。
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];
}
答案 1 :(得分:0)
?我想我有您的解决方法?
您将要设置min_element或一个新变量,可能是min_element_in_max_difference,而您已经在其中设置了max_element。
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int max_element = 0;
int min_element_in_max_difference = 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
min_element_in_max_difference = min_element; //Newer Addition. Should work!
}
if (arr[i] < min_element)
min_element = arr[i];
}
答案 2 :(得分:-1)
最好先按升序或降序对数组进行排序。 获取第一个元素和最后一个元素之间的差异。
我希望这会找到您。