繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM