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

  • 5
  • Недоступна
Если числа повторяются, значит, это кому-нибудь нужно? В данный момент это нужно нам, чтобы потренироваться решать задачи на списки. Давайте создадим список чисел и добавим в него 10 чисел с клавиатуры. Наша задача состоит в том, чтобы вывести на экран длину самой длинной последовательности повторяющихся чисел в списке.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (351)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Максим10 уровень, Москва
суббота, 12:35
Решил без создания новых массивов путем переборки всех совпадений между всеми числами. Внутренний цикл for сравнивает значение первого числа со всеми в массиве, внешний цикл for осуществляет переход на второе число и тд. Ну и внутри первого for - if со счетчиком, который сбрасывается, если последовательность одинаковых чисел прерывается. Решение в 8 строчек
MartyMcAir10 уровень
10 июня, 17:13
оч. интересная задача даж в закладки добавил. Хотел сделать с переключателями типо, чтоб ветвление переключалось, в зависимости от boolean переменной. и 2 счетчика которые бы сравнивались.. Мол предыдущая последовательность сравнивалась бы с той что только что прервалась и т.д.. В итоге подход с записью всех последовательностей в массив оказалось самым понятным решением.. Впрочем без дебагера не обошлось. эту задачу решили 17к человек.
KarlNogebator13 уровень, Москва
21 мая, 12:52
Жизнь слишком коротка, что бы решать такие задачи без копипасты и правок почти готовых решений из хелпа.
Alex_330298738 уровень, Москва
суббота, 20:25
цель задачи научить находить правильное решение самому...чужим умом богат не будешь... я смотрю решение других только после того, как сам сделаю...
New Year15 уровень, Москва
9 мая, 22:56
если равны, то увеличивал переменную и кидал в массив, если не равны присваивал 1 и тоже кидал в массив, а потом по массиву нашел максимальный))
Александр9 уровень, Москва
8 мая, 06:51
Решил, но с 3-ей попытки! Пару подводных камней попалось в алгоритме. Тут важно иметь в виду, что если нет совпадений, то это тоже последовательность = 1! Вот на подобных мелочах и прокалываешься, но полезно все же не торопиться с ответами, а домыслить самостоятельно, не подглядывая - крепче в мозгах уляжется когда сам дойдешь, промучишься :)
Alex_330298738 уровень, Москва
суббота, 20:27
тоже эту единицу отлавливал через дебаггер...а потом еще выяснилось, что числа могут быть больше 127, пришлось добавлять long...
ProgX11 уровень
7 мая, 18:04
Эхх, не легко далась задачка. Отладчик протер до дыр)
Anastas10 уровень, Гомель
3 мая, 13:25
Объясните, плиз. Почему if (list.get(i).equals(list.get(i+1))) - проходит, а (i++) нет?
Андрей Добродеев16 уровень, Москва
9 мая, 20:40
надо вместо i++ писать ++i Операция i++ называется инкремент. Так вот существуют два вида инкремента - префиксный инкремент ++i и постфиксный инкремент i++ Грубо говоря их отличие в том, что в случае префиксного инкремента (++i) сначала изменяется значение i, а потом использует его в выражении, а постфиксный сначала считает, а потом изменяет значение i, чтоб понять разницу приведу такой пример префиксный
int i = 5;
int a = ++i;
System.out.println("a = " + a + ", i = " + i);
в результате работы программы увидим a = 6, i = 6 Сначала увеличили i на 1, а затем присвоили a значение i. постфиксный
int i = 5;
int a = i++;
System.out.println("a = " + a + ", i = " + i);
получаем a = 5, i = 6 Мы сначала присвоили a значение 5, а лишь затем увеличили i на 1. В твоем случае то же самое, ты сначала сравниваешь list.get(i) c list.get(i) а только после вычисления увеличиваешь i на 1
Anastas10 уровень, Гомель
10 мая, 15:40
Огромное спасибо за ответ! Сразу всё понятно!
Самуил Олегович17 уровень, Киев
2 мая, 22:08
Интереснейший момент всплыл. Вот решал я задачу через идею и мне прилетает такой вот страйк при проверке - Я конечно захожу в онлайн версию и проверяю на числа больше 127, да программа их не видит и не решает. Я думаю дай ка тут нажму на проверку, а вдруг прокатит. Нажимаю и таки да - проверку прошел. И ни кого не смутило что код один и тот же) Только в идее он не проходит, а на сайте проходит проверку. Хотя на сайте я проверил, числа выше 127 он не видит, вот такое вот кино, по хлеще Мяскинков.
Александр22 уровень, Санкт-Петербург
30 апреля, 22:30
Решил, все хорошо, но объясните мне, неучу, почему при сравнивании через == все хорошо до 127? Там сравнивается 8-ми битный хэш?
Роберт9 уровень, Москва
2 мая, 00:38
Такой-же вопрос. Ниже пишут сравнивать с помощью equals().
Konstantin13 уровень, Санкт-Петербург
3 мая, 08:49
Тоже сперва задавался этим вопросом. Тут всё дело в том что в условии сказано "объяви переменную типа ArrayList с типом элементов Integer ". Integer в свою очередь является классом и поэтому переменная содержит не фактическое двоичное значение, как примитивный тип Int, а ссылку на объект. И соответственно при использовании оператора "==" сравниваются ссылки а не значения. Для этого и необходимо использовать equals(). Тут более подробно про отличия Integer и int - http://qaru.site/questions/44380/what-is-the-difference-between-integer-and-int-in-java
Konstantin13 уровень, Санкт-Петербург
3 мая, 09:01
Также класс Integer кеширует значения от - 128 до 127. И при присваивании значения из заданного диапазона переменной присваивается заранее сгенерированая ссылка. Поэтому при использовании оператора "==" по сути сравниваются две одинаковые ссылки.
Alex_330298738 уровень, Москва
суббота, 20:28
я тупо обозначил переменные как long
Haumi17 уровень, Санкт-Петербург
20 апреля, 12:48
Непонятно зачем я сделал сортировка списка.... Если Вы тоже зачем то сделали сортировку списка, убирайте и решайте так, думаю быстрее решите и не залезете в непонятные дебри =)
Alex_330298738 уровень, Москва
суббота, 20:29
было такое сначала XD привычка