2014-12-04 25 views
2

我有一個排序的數組。比方說,這是int [] numArr=new int[]{6, 9, 10, 27};如何找到數組中相鄰的兩個數字之間的最小距離?

的最短距離是9和10之間,這是1.方案應打印此1.

我沒想到的代碼,但我希望有人可以給我一個如何進行的想法。

+2

在數組上循環,檢查'item [n] - item [n + 1]',假設一個升序數組,並存儲最小的結果。 – 2014-12-04 21:38:33

+1

'item [n] - item [n + 1]'會給你負號...... – kiwixz 2014-12-04 21:49:40

回答

-2
int smallest = 100000 

for (int i = 0; i < array.length; i++) 

    if(array[i+1]-array[i]<smallest) 
    { 
     smallest = array[i+1]-array[i]; 
    } 

System.out.println(smallest); 
+1

如果最小的是100001,那麼呢? – DavidGSola 2014-12-04 21:44:40

+1

應該停在array.length-1以避免超出界限。 – 2014-12-04 21:44:52

+2

我接受了你的答案,不是因爲它的工作效率達到100%,而是你幫助我清除了這個概念。然而,array.length到達數組之外,因此我將其修改爲array.length-1。我將最小整數定義爲Integer.MAX_value。感謝您幫助我,xoxo。 – Simon 2014-12-04 22:39:48

0
public static final int findSmallestDistance(final int[] pArray) { 
    int lMinimumDistance = Integer.MAX_VALUE; 
    for(int i = 1; i < pArray.length; i++) { 
     int lDifference = pArray[i] - pArray[i - 1]; 
     if(lDifference < lMinimumDistance) { 
      lMinimumDistance = lDifference; 
     } 
    } 
    return lMinimumDistance; 
} 
+3

OP聲明「我不期待直接編碼」。 – rgettman 2014-12-04 21:39:42

+2

查看選定的錯誤答案。 感謝您的不必要的downvote。 – 2014-12-07 18:27:57

2

聲明一個變量來保存當前的最小距離。它可以被初始化爲一個非常大的數字Integer.MAX_VALUE,以便計算的第一個距離成爲初始最小距離。

使用for循環來循環這些值。您將訪問當前索引處和下一個索引處的元素,因此請儘早停止for循環以防止出現ArrayIndexOutOfBoundsException

for循環中計算差值。如果差值小於當前最小值,則將當前最小值更新爲當前差值。

0

步驟1:創建一個變量來保存實際最小距離步驟2

迭代通過您的陣列

步驟3:比較實際號碼與先前的陣列上(如果這是第一個元素跳這一步),如果它小於你最小的保存結果

步驟4:我F中的陣有更多的元素,得到下一個,否則打印結果

0

下面是一些僞代碼:

成爲最小=一些肯定比你正在尋找

的一個更大對於每個元素i的陣列除了第

Be n = array[i] - array[i-1] 

If n < smallest then 

    smallest = n 

End If 

END FOR

0
int numArr[] = {6, 9, 10, 27}; 
    for(int i=0;i<numArr.length-1;i++){ 
     if(numArr[i+1]-numArr[i]>0){ 
      System.out.println("distance between " +numArr[i]+ " and "+numArr[i+1]+ " is: "+ (numArr[i+1]-numArr[i])); 
     } 
    } 
相關問題