Найдите элемент в массиве, который меньше M следующих элементов

#java #arrays #algorithm

#java #массивы #алгоритм

Вопрос:

Задача:

Найдите элемент в массиве, размер N которого меньше M следующих элементов в этом массиве.

 Here is algorithm:
a[0]<a[1] => true, then
a[0]<a[2] => false, then
a[2]<a[3] => true, then
a[2]<a[4] => true, then
... => always true
a[2]<a[m 2] => true then return a[2] //a[2] is minumum, m 2<n
  

Моя реализация не работает. Цикл кажется бесконечным.

 int[] array = new int[]{-1, 2, -3, 5, 0, 6, 9, -1, 5, 7, 8, 1};
int numElements = 5;
int i=0;
int j=1;
int resu<

while (i j < array.length){
if (array[i]<array[i j]){
     if (i j == numElements){
       result = array[i];
     } else j  ;
   } else {
    i  = j;
    j = 1;
    }
  }
  

Мой вывод должен быть -3.

Текущий вывод отсутствует: бесконечный цикл.

Комментарии:

1. Добавьте больше информации, такой как ввод , желаемый результат и текущий результат .

2. Почему ваш вывод должен быть -3 , небольшого объяснения будет достаточно. Вам нужен второй минимальный элемент в вашем массиве?

3. Используете ли вы arr or array для имени переменной? Также ~ вы должны удалить j из своего блока if else, чтобы он выполнялся каждый раз arr[i]<arr[i j] . Я обновлю свой ответ.

4. Я хочу найти первый элемент, для которого один из следующих 5 (M) элементов должен быть больше. -3 меньше 5,0,6,9,-1.

Ответ №1:

Когда arr[i] < arr[i j] равно false, вы должны быть…

  1. сброс j в 1
  2. установка i равной i j

Вы также должны добавить проверку в while условие цикла, чтобы гарантировать i j < arr.length

Наконец ~ извлеките j из своего else блока.

 while (i j < array.length amp;amp; r){
    if(array[i]<array[i j]){
        if(i j == numElements){
            result = array[i];
            r = false;
        }
          j;
    }
    else{
        i  = j;
        j = 1;
    }
}
  

Когда я реализовал это на C , я получил правильный вывод -3 .

Комментарии:

1. Вы правы, но это не решает проблему. Мой цикл кажется бесконечным.

2. @AndreiSh while цикл должен останавливаться при result обновлении, правильно? В этом случае я мог бы предложить добавить boolean флаг, чтобы указать, что вы нашли число, которое меньше следующих M чисел.

3. Я удалил свое первое условие else, и оно сработало! Спасибо!

4. @AndreiSh всегда пожалуйста. Один раз i j == numElements был true ~ j никогда не увеличивался, что создавало бесконечный цикл обновления result переменной. Рад, что смог помочь! 🙂

5. @AndreiSh кстати — это немного поздно добавлять, но if(i j==numElements) должно быть на самом деле, if(j==numElements) поскольку j представляет M следующих элементов. Их сложение может привести к преждевременному возврату условия true, особенно если индекс, с которым вы сравниваете M следующих элементов, равен >= numElements