2014-12-04 3 views
2

У меня есть отсортированный массив. Скажем, это int [] numArr=new int[]{6, 9, 10, 27};Как найти наименьшее расстояние между двумя числами рядом друг с другом в массиве?

Наименьшее расстояние между 9 и 10, и это 1. Программа должна печатать эту 1.

Я не ожидал код, но я надеюсь, что кто-то может дать мне идея о том, как действовать дальше.

+2

петля на массиве, проверьте 'item [n] - item [n + 1]', предполагая отсортированный восходящий массив и сохраняя наименьший результат. –

+1

'item [n] - item [n + 1]' даст вам отрицательные числа ... – kiwixz

ответ

-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

+1

должен, вероятно, остановиться на array.length-1, чтобы не отставать от графика. –

+2

Я принял ваш ответ не потому, что он работал на 100%, а вы помогли мне очистить концепцию. Однако array.length выходит из массива, поэтому я изменил его на array.length-1. И я определил наименьшее целое число Integer.MAX_value. Спасибо, что помогли мне, xoxo. – Simon

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

+2

Проверьте выбранный, ошибочный ответ. Спасибо за ненужное понижение. –

2

Объявите переменную, чтобы удерживать текущее минимальное расстояние. Он может быть инициализирован действительно большим числом Integer.MAX_VALUE, так что первое пройденное расстояние становится начальным минимальным расстоянием.

Используйте петлю for, чтобы перебрать значения. Вы получите доступ к элементу по текущему индексу и следующему индексу, поэтому сначала остановите цикл for, чтобы предотвратить ArrayIndexOutOfBoundsException.

В цикле for вычислите разницу. Если разница меньше текущего минимума, обновите текущий минимум до текущей разницы.

0

Шаг 1: создать переменную, чтобы сохранить фактический наименьшее расстояние

Шаг 2: итерация через массив

Шаг 3: сравнить фактическое число с предыдущим в массиве (если это первый элемент, перейдите на этот шаг), и если он меньше вашего наименьшего сохранения результата

Шаг 4: i е массив имеет несколько элементов, получить следующий, еще распечатать результат

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