2016-09-30 24 views
0
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.How?如何解決數組中的maximum-Firstminimum?

+2

改變你的兩條語句的順序 –

+2

這是java還是C++? –

+0

你明白max-min中的問題,但它是最大的-First_minimum,仔細閱讀關於問題的陳述 –

回答

1

該算法(如@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 
+0

謝謝你,我想通了.. – Digs

2

使用下面的代碼,它會給你預期的答案。

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

以下代碼將起作用。

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