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

  • 5
  • Недоступна
Если числа повторяются, значит, это кому-нибудь нужно? В данный момент это нужно нам, чтобы потренироваться решать задачи на списки. Давайте создадим список чисел и добавим в него 10 чисел с клавиатуры. Наша задача состоит в том, чтобы вывести на экран длину самой длинной последовательности повторяющихся чисел в списке.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (276)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Мишаня17 уровень
9 ноября, 09:00
Для тех кто запутался и нужна небольшая подсказка, создали int max =1; int maxTemp =1; int x=0; // list.get(i); тек значение int temp= 0; //list.get(i-1); пред. значение затем создали цикл и проверяем если х == temp тогда maxTemp++; иначе maxTemp = 1; и после первого условия еще одно мини условие если maxTemp > max то max=maxTemp далее осталось вывести на экран max
kraznik8 уровень
3 декабря, 05:42
Спасибо
Радик14 уровень, Казань
7 ноября, 14:54
С 8 попытки! Думаю, это мой антирекорд )))
Alexey Efremychev8 уровень, Санкт-Петербург
28 ноября, 15:00
12)
REM10 уровень, Москва
4 ноября, 19:16
Почему в случае отсутствия последовательности значение должно быть 1 а не 0? Это гдето в условии и я не увидел? допустим ввели числа все разные 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. - втаком случае последовательности нет? Или я не понимаю что такое последовательность?
Сергей Солтыс21 уровень
7 ноября, 14:22
Потому что тогда последовательность из одного числа самая длинная.
REM10 уровень, Москва
10 ноября, 08:40
Спасибо, учту. Есть гдето четкое определение? если одно число является последовательностью то может и 0 чисел тоже есть последовательность?
Артур22 уровень, Санкт-Петербург
28 октября, 13:36
Авторы, Ваш текст :) Пример для списка 2, 4, 4, 4, 8, 8, 4, 12, 12, 14: 3 Искомое значение равно 3, т.к. самая длинная последовательность повторяющихся чисел состоит из трех четверок. Уберите одну четверку:)
Вадим13 уровень
3 ноября, 23:22
Все верно, длина последовательности повторяющихся четверок = 3
Nik9 уровень
1 декабря, 06:20
потому что дальняя четверка уже не в непрерывной последовательности
Anatoliy16 уровень
14 октября, 22:15
Все ждал, когда же встретится задача, которую не смогу решить в браузере. Вот она! Тот самый случай, когда проще поставить IDE и искать ошибку нажимая <F7> или <F8>, чем ломать голову черкая на листочках бумаги.
DancingShaman22 уровень
7 сентября, 22:24
Решил с седьмой попытки, играя в игру "побори валидадор".
Александр22 уровень, Москва
3 сентября, 10:59
Недели две страдал над этой задачей, все время что-то не так было. Отложил ее почти на месяц, вернулся, и легко решил, при этом той же методикой, что и в ранних попытках... Чудно)
MP13 уровень
1 сентября, 14:52
Долго сидел и читал комментарии. Оказалось, решение довольно изящное и без заморочек. К примеру, на страничке одного из аккаунтов GitHub: https://gist.github.com/AccordEuro06/370fcb6cd0d6d4d04d02e787508c2583 С небольшой поправкой: при сравнении соседних элементов списка я использовал equals Как итог + 10 дублонов :)
Alexey Polyakov18 уровень
10 октября, 22:19
Классно. Если бы не надо было проходить собеседование, программисты вообще не учились бы, а просто гуглили решение)
Juris 8 уровень
14 часов назад
equals для типа int? ;)
Александр32 уровень
30 августа, 11:55
подсказки по задаче: -сделайте отдельный список где будут хранится длины последовательностей -последовательности можно считать так: сравнивать текущее значение списка со следующим и если они одинаковы увеличить счетчик (по умолчанию счетчик равен еденице) -числа сравниваем через .equals ибо Integer это ссылочный тип и через == будет работать только с числами до 127
Denis Fedotov11 уровень, Москва
5 сентября, 21:29
смотря что с чем сравнивать, если с интом то сработает автораспаковка
Nik9 уровень
1 декабря, 06:22
Спасибо, комент очень помог)) Ника не мог понять почему с большими цифрами не срабатывает!
Леонид8 уровень, Москва
вчера, 14:51
А можно последний пункт объяснить подробнее ?
Constantine8 уровень
35 минут назад
Could you please, leave the link regarding the comparison peculiarities for Integer type? Thanks.
Евгений14 уровень, Екатеринбург
14 августа, 13:52
int temp = 1;
int real = 1;

for (int i = 9; i > 0; i--){
    if (num.get(i).equals(num.get(i-1))) temp++;
    else if (num.get(i).equals(num.get(i-1)) == false){
        real = temp;
        temp = 1;
вывод: 2500 4500 4500 4500 8500 8500 4500 12500 12500 14500 большая длина: 3 валидатор пишет: "Убедись, что программа работает правильно, если последовательность состоит из чисел, которые больше 127." в чём подвох?
Igor18 уровень, Киев
15 августа, 16:38
Там ниже в комментариях как-бы есть ответы. Я после такого же гона валидатора, инстинктивно добавил (int) перед каждым методом get. И не использовал equals. Сравнивал через ==. Типа так:
if ( (int) num.get(i) == (int) num.get(i - 1) )
VitalyK #111612414 уровень
18 августа, 12:41
Огромное СПАСИБО за (int) , а то пишет что не работает с числами больше 127 и всё. Может знаете почему так происходит ?
Igor18 уровень, Киев
19 августа, 07:33
Да. Каждая переменная типа Integer, это на самом деле объект. Оператор == сравнивает адреса объектов в памяти, а не их содержимое. В случае с Integer, JVM может сравнивать объекты как примитивные типы, но лишь со значением до 127. На этот случай есть метод equals или можно применить приведение типов
(int)
. В конце каждого уровня, профессор накидает нам полезные ссылки на статьи. Пару уровней назад, была статья и о том, как сравнивать объекты.
Александр Толкачёв22 уровень, Санкт-Петербург
21 августа, 17:47
у объектов Integer есть пул в памяти от -128 до 127. Если создается новый объект в этом диапазоне, то формально создания не происходит, а происходит копирование адреса на уже существующий объект с таким значением (если он был создан ранее). Сделано для уменьшения расхода памяти, насколько я понимаю. Т.к. мы оперируем значениями типа Integer (а это объекты) то при сравнении их через "==" происходит сравнение ссылок, а не значений. Из за пула, про который я сказал в начале, у двух или более значений из диапазона -128...127 будут одинаковые ссылки, и равенство будет выполнятся. А если мы будем сравнивать числа вне этого диапазона, то пул уже подключаться не будет, и ссылки на объекты будут разными, и следовательно "==" проходить не будет. Надо использовать equals(), который сравнивает более подробно.