2014-04-03 130 views
0

我寫了一個(到目前爲止不完整的)方法,該方法應該接受一個int整數,找到相鄰單元之間的差異,然後返回最小的差值。數組練習混淆

例如:

[9,16,4,8,20] - > 7,12,如圖4所示,12 - > 4

[12,21,33,6,3 ,3] - > 9,12,27,3,0 - > 0

這是我的方法:

public static int minGap(int[] a) { 
    int gap = 0; 
    for (int i = 0 ; i < (a.length - 1) ; i++) { 
     gap = Math.abs(a[i + 1] - a[i]); 
     System.out.println(gap); 
    } 
    return gap; 
} 

相信我有中間步驟正確(發現的差異),但我無法弄清楚如何將它們進行比較併產生最小的一個。我假設我會使用一個if語句,但我只有一個變量「gap」來處理。

請讓我知道您的建議。

+1

不要全部比較它們。將第一個結果存儲在變量中,並將以下結果與該變量進行比較。如果當前結果較小,則替換變量結果。 – AntonH

回答

2

爲目前發現的最小間隙引入一個新變量。它可以初始化爲巨大的,可能是Integer.MAX_VALUE

在循環中,如果當前間隙小於迄今爲止找到的最小間隙,則將迄今爲止發現的最小間隙設置爲當前間隙。然後在for循環完成後,您有最小的差距。

+0

這比@ peter.petrov的解決方案稍微清潔一些,因爲通過初始化爲Integer.MAX_VALUE,可以避免專門處理第一個間隙的必要性。 –

0

只需添加一個最小變量並根據需要進行更新。

public static int minGap(int[] a) { 
    int gap = 0; 
    int min = 0; 
    for (int i = 0 ; i < (a.length - 1) ; i++) { 
     gap = Math.abs(a[i + 1] - a[i]); 
     if (i==0 || gap < min) min = gap; 
     System.out.println(gap); 
    } 
    return min; 
} 
+0

我不認爲你總是需要檢查'i'是否等於'0'。 –