如何解决数组中的最大值-第一个最小值


static int maxDifference(int[] a) {
    int minimum, diff = -1;
    if(a.length == 0) {
        return -1;
    }
    minimum = a[0];
    for (int i = 1; i < a.length; i++) {
        diff = Math.max(diff, a[i] - minimum);
        minimum = Math.min(minimum, a[i]);
    }
    return diff;

当我搜索max-Firstmin的代码时,发现了这个代码。请解释这段代码是如何为输入int[a]={20,10,65,95,110,200,60,700,5}工作的,它返回700-10而不是700-5。

使用下面的代码,它会给你期望的答案。

static int maxDifference(int[] a)
{
   int minimum, diff , maximum = -1;
   if(a.length == 0) {
   return -1;
   }
   minimum = a[0];
   maximum = a[0];
   for (int i = 1; i < a.length; i++) 
   {
      minimum = Math.min(minimum, a[i]);
      maximum = Math.max(maximum , a[i]);
   }
   diff = maximum - minimum;
   return diff;
} 

该算法(如@Pavneet所写)从所有先前值的值和最小值之间的差计算最大值-不是所有值。在你的例子中:

 int[a]={20,10,65,95,110,200,60,700,5}
 i=0, result = 0 (minimum from all previous values = 20 and value = 20) 
 i=1 result = 0 (minimum = 20, value = 10)
 ...
 i=7, result = 700 -10 (minium = 10, value = 700)
 i=8, result = -5 (miniumum= 10, value = 5)
 max(0,0..,700-10,-5) = 700-10

下面的代码可以工作。

static int maxDifference(int[] a) {
    int min = a[0];
    int max = a[0];
    for (int i = 1; i < a.length; i++) 
    {
       if(min > a[i])
           min = a[i];
       if(max < a[i])
           max = a[i];
    }
    return ( max - min );
}

最新更新