[英]Find maximum difference in an array along with the positions of the elements in Java
考虑一个数组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 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];
}
think我想你有解决办法🔥
您将要设置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];
}
最好先按升序或降序对数组进行排序。 获取第一个元素和最后一个元素之间的差异。
我希望这会找到你的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.