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 );
}