Cамая длинная последовательность

  • 10
  • Недоступна
Если числа повторяются, значит, это кому-нибудь нужно? В данный момент это нужно нам, чтобы потренироваться решать задачи на списки. Давайте создадим список чисел и добавим в него 10 чисел с клавиатуры. Наша задача состоит в том, чтобы вывести на экран длину самой длинной последовательности повторяющихся чисел в списке.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (660)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Ефим8 уровень, Костанай
вчера, 13:07
Интересно почему до 128 list.get() с типом Integer дает корректное значение, а если значение свыше 128 то list.get() возвращает ссылку...
Сергей12 уровень, Санкт-Петербург
позавчера, 23:41
Решил схитрить, Collections.sort(list). В итоге выдавало неверный результат, 4 вместо 3. Вкратце суть моего решения(как обычно грубое, неэстетичное, как будто код писали х..., никаких в 2 строчки и все в таком духе): создали ArrayList<Integer> и записали в него в цикле все вводимые значения. for (int i = 0; i < 10; i++) { list.add(Integer.parseInt(reader.readLine())); } Создали массив по количеству элементов листа и переменную-счетчик. В массив будем вносить значения длинны идущих друг за другом чисел. int[] res = new int[10]; int result = 1; Циклом мечемся по листу и сравниваем предыдущий элемент со следующим, если они равны, счетчик увеличиваем на 1, если нет и следующее число другое - сбрасывем счетчик на 1. for (int k = 0; k < 9; k++) { if (list.get(k).equals(list.get(k + 1))) { result++; res[k] = result; } else { result = 1; res[k] = result; } } Сортируем массив значений длинны последовательности чисел в массиве и выводим крайнее справа, т.е. самое большое. Arrays.sort(res); int max = res[res.length - 1]; System.out.print(max); Как-то так. Бейте, ругайте мне пофиг.
Максим Дудин8 уровень, Калининград
позавчера, 20:17
пятая попытка.... решил, как-то, видимо, криво, но..решил два массива один из них LIST<String> -потому, что условие//первая ошибка первый for занесение элементов первого массива второй for "обратный отчёт" от list.size-1 вниз в нём if сравнение чисел с индексом i и i-1через equals//через == нормально работало только до 127-(вторая ошибка) почему? если да, увеличение счётчика и присвоение его значения второму массиву если нет, счётчик приравниваем единице и опять добавляем значение в массив /* тут тоже сделал 2 ошибки сначала присваивал второму массиву, только в else (он до этого в "да" накрутился) и потом возвращал обратно в единицу - так терялась последняя последовательность (else перескакивало), потом перекинул присвоение в "да" всплыла ошибка " а что если все числа разные" а должна быть единица*/ короче занёс во второй массив все значения которые принимал счётчик а потом просто нашел максимальное и вывел на экран.
Andrej Kostin8 уровень, Рига
позавчера, 15:54
Не понимаю почему это было так сложно, потратил целый день, когда логика такая простая. Кому интересно, решил с одним циклом for, в нем if, else и if.
Mercury13 уровень, Киев
25 июня, 09:29
Кто-то может объяснить или скинуть статью ,почему нельзя сравнивать через ==,а нужно использовать equals?
Dator16 уровень, Киев
28 июня, 10:36
equals сравнивает значение по ссылкам, внутри ссылок так скажем. а == сравнивает сами ссылки. две ссылки с равным значением внутри, могут указывать на разные места в памяти.
Максим Дудин8 уровень, Калининград
позавчера, 20:21
а почему работает до 127, а потом нет?
Dator16 уровень, Киев
вчера, 07:41
Не могу понять вопрос. Дайте пример кода, может сообразим вместе что там происходит.
Максим Дудин8 уровень, Калининград
вчера, 08:56
вот при таком if (list.get(i)==list.get(i - 1))// работает только до значения list.get(i)=127 а вот при таком if (list.get(i).equals(list.get(i - 1))) при "любых" значениях введённых чисел остальной код до строки и после один и тот же.... могу прислать, боюсь администрация будет ругаться
Dator16 уровень, Киев
вчера, 09:09
если list состоит из String то в листе хранятся ссылки на heap, и == сравнивает адрес ссылок. если list состоит из int то в листе хранятся примитивы int, они же лежат в stack, и сравнение идет по значению, а не по ссылке. если лист состоит из Integer то в листе хранятся ссылки на heap, и == сравнивает адрес ссылок. Едем дальше. String pool Насколько я понимаю, в конкретном случае стринг пул и есть суть проблемы. Ссылку рекомендую к изучению. Обьявление
String s = "blablabla";
String s2 = s;
String s3 = new String(s2);
String s4 = new String("blablabla");
Адрес ссылок может отличатся.
Dator16 уровень, Киев
вчера, 09:13
Да и вообще, для сравнения чисел, было бы уместней пользоваться подходящими для этого типами))
Maximilian11 уровень, Минск
20 июня, 11:57
23 попытки и попытки решения через вложенный цикл for, попытки решать через 2 списка, попытки решать через один список. итог, решено через 1 список основной и дополнительный в который просто заносились результаты подсчета, 1 for и if/else/if. читал все ссылки, которые тут рекомендовали, оказалось все таким найтупейшим бредом (извините конечно, но мне непонятно как кто-то смог что-то понять, где собственно ничего не написано), а прозрение на эту простейшую задачу пришло после фрагментного прочтения вот этой статьи, возможно кто-то скажет то же самое и о ней, что она ни о чем, но честно, после прочтения 7 строчек, решение просто всплыло в голове.
Ольга 8 уровень, Нижний Новгород
вчера, 15:41
Спасибо большое! После прочтения пары абзацев статьи написала код)
Данил8 уровень, Новосибирск
14 июня, 14:57
Кто как и я пытался решить через мапу и потратил на это несколько дней - можно разложить максимальные значения продолжительности ряда чисел во второй ArrayList, записывая в него 1, когда следующее число отличается от предыдущего, отсорировать и взять последний элемент.
Aleks8 уровень, Москва
18 июня, 09:48
Тоже хотел использовать два ArrayList в одном список чисел, а в другом последовательности повторений, но что-то пошло не так. Он читал выводимое число как элемент массива, а не просто число. П.С: Скорее всего (Точно) мой косяк. /*Если кто-то решил через два ArrayList пришлите в личку. Хоть пойму в чем ошибка))*/
void009 уровень
11 июня, 10:06
После таких задач хочется уйти на неделю в запой. Хотя алгоритм решения простейший.
Юневич Евгений9 уровень, Kaluga
17 июня, 19:26
Мой Бро )))) хахахах
Sasha Motorin11 уровень, Кострома
18 июня, 20:37
пацаны, дак вы накидывайте решение в IDEA или нажимайте "запуск" тут, тогда не будет столько попыток)
Юневич Евгений9 уровень, Kaluga
18 июня, 21:08
да пофиг )) чисто по приколу ) лично мне в идее работать не оч удобно, плагин подтурливает там ) а вообще нудно бы перейти с коецами на нее уже ))))) спасибо за совет ))))))
void009 уровень
20 июня, 10:25
Мне то же удобнее мелкие задачи решать тут на сайте
Alexander12 уровень, Днепр
10 июня, 00:13
Во-первых объявляйте тип List, а не ArrayList Во-вторых при сравнении элементов листа используйте equals, либо загоняйте элементы в отдельные переменные, так как если значение элемента больше 127 (что больше кеша) сравнение вернет фолс при казалось бы одинаковых значениях.
Андрей9 уровень, Киев
16 июня, 09:50
Спасибо за подсказку с equals🙂
Stan13 уровень
18 июня, 15:41
Кому интересно узнать подробнее почему сравнение объектов Integer через == в диапазоне -128..+127 дает true, а вне этого диапазона false - читайте ответ-решение к вопросу по ссылке
23 июня, 10:26
ссылка кривая :(
Stan13 уровень
25 июня, 11:11
Сори, вот: https://javarush.ru/help/21535
Петр8 уровень, Санкт-Петербург
3 июня, 17:44
Для тех, кто не хочет использовать for i вместо foreach, но по алгоритму перебор требуется начать не с 0 элемента, есть такое относительно элегантное решение:
for (Integer currentNumber : numbers.subList(1, numbers.size())) {

}