2014-04-03 89 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'。 –