2015-09-07 2 views
0

Я пытаюсь найти индекс наименьшего числа, но только после определенной точки в массиве.Индекс наименьшего числа, начинающийся с определенного индекса

Метод, над которым я работаю, это indexOfTheSmallestStartingFrom.

Я делаю упражнения mooc.fi 104,3, если вам нужно больше информации перейдите к http://mooc.cs.helsinki.fi/programming-part1/material-2013/week-6?noredirect=1 и прокрутите вниз, чтобы осуществлять 104.

Мой вопрос, как я могу начать с, из, например, индекс 2 в массив и игнорировать все перед ним. Я пытаюсь найти наименьшее число в массиве после определенного индекса.

Мой код

import java.util.Arrays; 

public class Main { 

    public static int smallest(int[] array) { 
     int[] sorted = new int[array.length]; 

     for (int i = 0; i < array.length; i++) { 
      sorted[i] = array[i]; 
     } 

     Arrays.sort(sorted); 
     return sorted[0]; 
    } 

    public static int indexOfTheSmallest(int[] array) { 
     for (int i = 0; i < array.length; i++) { 
      if (array[i] == smallest(array)) { 
       return i; 
      } 
     } 
     return 0; 
    } 

    // This is the method here. 
    public static int indexOfTheSmallestStartingFrom(int[] array, int index) { 
     for (int i = index; i < array.length; i++) { 
      if (array[i] == smallest(array)) { 
       return indexOfTheSmallest(array); 
      } 
     } 
     return 27; 
    } 

    public static void main(String[] args) { 
     // indexes: 0 1 2 3 4 
     int[] values = {-1, 6, 9, 8, 12}; 
     System.out.println(indexOfTheSmallestStartingFrom(values, 1)); 
     System.out.println(indexOfTheSmallestStartingFrom(values, 2)); 
     System.out.println(indexOfTheSmallestStartingFrom(values, 4)); 
    } 
} 
+0

Извините, я отредактировал главный пост. Я не знаю, что делать – syntax

+0

Какая у вас проблема? – khelwood

+0

Я не знаю, как начать с определенного индекса и игнорировать все до него – syntax

ответ

1

Вы не можете использовать метод smallest при реализации indexOfTheSmallestStartingFrom, так как наименьший элемент возвращенного smallest может быть в начале массива (то есть в индексе меньше передаваемая index).

Намного проще реализация будет:

public static int indexOfTheSmallestStartingFrom(int[] array, int index) { 
    int minIndex = index; 
    for (int i = index; i < array.length; i++) { 
     if (array[i] < array[minIndex]) { 
      minIndex = i; 
     } 
    } 
    return minIndex; 
} 
+0

Глядя на код OP, который даже не начинает напоминать решение, думаете ли вы, что он многому научит из чистого, полностью законченного решения своего упражнение? – dasblinkenlight

+0

Да, это работает, но я не совсем понимаю это полностью – syntax

+0

@syntax Ну, вам не нужно сортировать массив, чтобы найти индекс самого маленького элемента. Вам просто нужно перебирать элементы массива, начиная с данного индекса, и следить за индексом, содержащим наименьшее число (всякий раз, когда вы найдете индекс i, такой как 'array [i] Eran

0

indexOfTheSmallest возвращается в индекс наименьшего элемента, в то время как вы сравниваете его со значениемэлемента в indexOfTheSmallestStartingFrom.

== EDIT ==

См ответ @Eran «s для более эффективной реализации.

0

Я попытался исправить ваш код с минимальными изменениями.

public class Main { 

    public static int smallestFrom(int[] array, int index) { 
     int[] sorted = new int[array.length-index]; 

     for (int i = index; i < array.length; i++) { 
      sorted[i-index] = array[i]; 
     } 

     Arrays.sort(sorted); 
     return sorted[0]; 
    } 

    // This is the method here. 
    public static int indexOfTheSmallestStartingFrom(int[] array, int index) { 
     int smallest = smallestFrom(array, index); 
     for (int i = index; i < array.length; i++) { 
      if (array[i] == smallest) { 
       return i; 
      } 
     } 
     return 27; 
    } 

    public static void main(String[] args) { 
     // indexes: 0 1 2 3 4 
     int[] values = {-1, 6, 9, 8, 12}; 
     System.out.println(indexOfTheSmallestStartingFrom(values, 1)); 
     System.out.println(indexOfTheSmallestStartingFrom(values, 2)); 
     System.out.println(indexOfTheSmallestStartingFrom(values, 4)); 
    } 
} 

smallest метод был изменен на smallestFrom. smallestFrom вычисляет наименьшее значение, начиная с индекса. Делает это путем создания скопированного массива, который содержит только значения от индекса до конца массива.
indexOfTheSmallestStartingПри первом вызове smallestFrom, чтобы получить значение smalles в этом subArray; то он выполняет итерацию массива от индекса до тех пор, пока не найдет указанное наименьшее значение. Индекс, когда значение найдено, - тот, который был возвращен.

Решение Eran лучше. Меньше кода и более эффективен. Этот код существует только для того, чтобы помочь вам лучше понять ситуацию.

Смежные вопросы