查找数组中的最大差异以及Java中元素的位置

时间:2019-07-26 02:57:38

标签: java arrays

考虑一个数组-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)的值,而不是导致差值的最小数字。

帮助!

3 个答案:

答案 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)

最好先按升序或降序对数组进行排序。 获取第一个元素和最后一个元素之间的差异。

我希望这会找到您。