#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
orarray
для имени переменной? Также ~ вы должны удалитьj
из своего блока if else, чтобы он выполнялся каждый разarr[i]<arr[i j]
. Я обновлю свой ответ.4. Я хочу найти первый элемент, для которого один из следующих 5 (M) элементов должен быть больше. -3 меньше 5,0,6,9,-1.
Ответ №1:
Когда arr[i] < arr[i j]
равно false, вы должны быть…
- сброс
j
в1
- установка
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