2015-11-01 4 views
1

Этот метод возвращает максимальную абсолютную разницу между элементами в одном array. Он вычисляет разницу между всеми номерами в array, но я пытаюсь адаптировать его к возврату индекса максимальной абсолютной разницы.Элементы в массиве

Например:

Array = [7, 19, 5, 10, 16, 8, 1, 19, 6, 13] 
Index = [0, 01, 2, 03, 04, 5, 6, 07, 8, 09] 

В этом массиве, самое большое абсолютное значение разности является 18 (= 1-19), и это происходит в индексный номер 6.

Кроме того, если существует несколько равных различий, метод должен вернуть один из более высоких индексов. В приведенном выше примере это будет возвращать индекс 3 вместо 0

Array = [1, 19, 5, 1, 19] 
    Index = [0, 01, 2, 3, 04] 

Эта проблема немного усложнять, и я не выяснить, как это сделать. Кто-нибудь знает?

public static int stepMaxDiff(int[] array){ 

     int diff = 0; 
     int max = 0; 

     if (array.length == 0){ // Checks for empty array and returns -1 
      return -1; 
     } 

     for (int i = 0; i < array.length - 1; ++i){ // i is the element in the array 

      if (i == array.length - 1){ 
       diff = Math.abs(array[i] - array[0]); 
       // Calculates the last element of the array minus the first one 

      } else { 
       diff = Math.abs(array[i] - array[i+1]); 
       // Calculates the element i minus element [i+1] 
      } 

      max = diff >= max ? diff : max; 
     } 

     return max; 
    } 
+0

Является ли это назначением? Я уверен, что ты сможешь это сделать. Просто возьмите ручку и бумагу и попробуйте сделать это шаг за шагом. Задайте себе правильные вопросы. Это простая логика, больше ничего. –

ответ

0

Вы должны добавить maxIndex к max, и хранить его каждый раз, когда вы обновите max:

if (diff >= max) { 
    max = diff; 
    maxIndex = i; 
} 

Вы могли бы избежать хранения max в целом, заменив его maxIndex, но тогда вам нужно будет повторно -каскалить max на каждой итерации, что может оказаться неоптимальным.

+0

Спасибо! Это выражение 'if' работает, но не для всех случаев. Например, массив [4,18] должен вернуть 1 (потому что это 18 - 4), но он возвращает 0. – Rods2292

+0

@ Rods2292 Это потому, что ваша петля «обертывается» неправильно. Вы должны сделать условие либо 'i <= array.length - 1', либо' i dasblinkenlight

+0

Это правда! Я не заметил, что 'i <= array.length - 1' был написан без символа' = '. – Rods2292