2014-12-04 69 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])); 
     } 
    } 
相关问题