Фиксированная точка (значение, равное индексу) в заданном массиве с использованием линейного поиска - лог c вопрос - PullRequest
1 голос
/ 06 августа 2020

Может ли кто-нибудь объяснить, почему использование этого метода ниже возвращает только первое совпадающее значение в массиве? Например, если мой элемент массива равен 0, 1, 2, 3 и 4. Он вернет 0 вместо 4. Каждое значение в массиве соответствует его индексу 4, следует использовать for l oop return 4 после последнего итерация завершена?

static int linearSearch(int arr[], int n) 
    { 
        int i; 
        for(i = 0; i < n; i++) 
        { 
            if(arr[i] == i) 
                return i; 
        } 
        
        /* If no fixed point present  
           then return -1 */
        return -1; 
    } 
    //main function 

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

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

static int linearSearch(int arr[], int n) 
    { 
        int i,index = -1; 
        for(i = 0; i < n; i++) 
        { 
            if(arr[i] == i) 
                index = i; 
        } 
        
        /* If no fixed point present  
           then return -1 */
        return index; 
    } 
    //main function 
2 голосов
/ 06 августа 2020

Это потому, что в вашем if вы сразу вызываете return, и ваш метод должен возвращать единственный int. Если вы хотите собрать все фиксированные точки, вы можете изменить свой метод следующим образом:

static List<Integer> linearSearch(int arr[], int n)
{
    List<Integer> fixedPoints = new ArrayList<>();
    for(int i = 0; i < n; i++)
    {
        if(arr[i] == i)
            fixedPoints.add(i);
    }

    return fixedPoints;
}
1 голос
/ 06 августа 2020

Q: Может ли кто-нибудь объяснить, почему использование этого метода ниже возвращает только первое совпадающее значение в массиве?

Метод возвращается к коду, который вызвал его, когда достигает return оператор.

From do c:

Возвращение значения из метода

Метод возвращает к коду, который его вызвал, когда он

  • завершает все операторы в методе,
  • достигает оператора возврата или
  • вызывает исключение,

в зависимости от того, что произойдет раньше.

Оператор if(arr[i] == i) возвращает истину на первом шаге for l oop:

i=0
arr[0]=0

Затем строка return i; выполнена.

Q: Каждое значение в массиве соответствует его индексу 4, следует ли использовать for l oop return 4 после завершения последней итерации?

В этом условии последняя итерация является первой итерацией for l oop. Работает только для i=0. Значение i никогда не достигает 4.

...