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

  • 10
  • Недоступна
Если числа повторяются, значит, это кому-нибудь нужно? В данный момент это нужно нам, чтобы потренироваться решать задачи на списки. Давайте создадим список чисел и добавим в него 10 чисел с клавиатуры. Наша задача состоит в том, чтобы вывести на экран длину самой длинной последовательности повторяющихся чисел в списке.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (827)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр Горохов работаю в заводе
8 сентября, 13:39
Обалдеть! С 18 попытки! А всё потому, что запутался в "ифах" и в упор не видел нарушения логики. Ааааа! Надо больше практики, видимо:)
Валентин
Уровень 9
7 сентября, 11:25
Вот такой вывод валидатор пропустил System.out.println(counterStable+1); Но это не верно, так как при отсутствии последовательностей будет выводить что есть одна повторяющаяся цифра.
Евгений
Уровень 15, Санкт-Петербург, Россия
23 июля, 13:52
Так как в задаче нет упоминания об ArrayList, решил создать именно LinkedList, но валидатор ругается, что я не соблюдаю условие по добавлению 10 элементов.
Виктор Наумович
Уровень 9, Минск, Беларусь
9 июля, 21:58
ТЗ выполнено. Программа работает. Валидатор ее не принимает и я в тупую не понимаю почему. Так почему же?
public class Solution {
    public static void main(String[] args) throws IOException {
        //напишите тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        List<Integer> listOfNums = new ArrayList<Integer>(10);
        List<Integer> listOfCounts = new ArrayList<Integer>();
        int count = 1;
        for (int i = 0; i < 10; i++){
            int curNum = Integer.parseInt(reader.readLine());
            listOfNums.add(curNum);
        }

        for (int i = 0; i < 9; i++){
            if (listOfNums.get(i).equals(listOfNums.get(i + 1))){
                  count++;
                  listOfCounts.add(count);
            }
            else {
                count = 1;
            }
        }
        System.out.println(Collections.max(listOfCounts));
    }
}
sasha
Уровень 8
29 июня, 07:25
Может кто подсказать зачем в правильном решении(по джавараш) вот этот блок else if (max > count) { count = max; max = 1; } В идее прогонял много вариантов чисел. На каждый блок вывод поставил и нигде он не срабатывает. И вывод без этого блока в идее нормальный. А вот в джавараш без этого блока не проходит по последнему пункту. Может кто объяснить? Спасибо
Александр Белан
Уровень 9, Москва, Россия
7 сентября, 17:02
Присваиваешь максимум совпадений переменной count и сбрасываешь переменную max
Максим Белоусов
Уровень 13, Москва, Россия
22 июня, 19:26
Столкнулся с тем что продумывал логику (if-else) пару часов, не меньше! Эмаль на зубах скрипела, шестерни в голове клинило. Посоветуйте как можно более эффективно продумывать такую логику? Может быть нужно почитать литературу по алгоритмам? Или этот и есть тот самый гранит науки который нужно только грызть?
piersto
Уровень 17, Montreal, Canada
2 июля, 15:02
Я думаю, это и есть тот самый гранит науки. Я на днях подсмотрел одно решение. Там прикол был в том, что надо создать дополнительную, так сказать, временную, переменную и перезаписывать её. Это меня натолкнуло на мысль, что и здесь надо что-то подобное. Так и было.
Alexx Dorofeev
Уровень 9, Санкт-Петербург
8 июня, 18:01
Объясните пожалуйста по-русски, что не нравится валидатору: "Убедись, что программа работает правильно, если последовательность состоит из чисел, которые больше 127."
int max = 1;
            for (int j = 1; j<10; j++) {
                if (list.get(j) == list.get(j-1))
                {count++;
                    if (count > max)  max = count;}
                else count = 1;
just_DO_it
Уровень 18
16 июня, 15:52
актуально или нет, не знаю) меняй - (list.get(j) == list.get(j-1)) на list.get(j).equals(list.get(j - 1)
Ольга
Уровень 20, Санкт-Петербург
27 июня, 22:23
а можете объяснить зачем?
piersto
Уровень 17, Montreal, Canada
2 июля, 15:07
Чуть ниже есть объяснение.
Андрей
Уровень 15, Москва
18 мая, 13:11
Крутая задачка! Проверил все 10 чисел на последованность, в конце каждой проверки сохранял длинну последованности в отдельном списке (даже если последованности не было, все равно сохранял единицу) Потом вывел самое большое число этого отдельного списка. Подсказка: сравниваем объекты через equals()
Денис Кочетов Technical Lead в СП62
18 мая, 09:05
Пришлось нарисовать на бумаге массив и расписать все ходы цикла, чтобы понять, что и куда должно ходить. Я так понял, что всегда, когда мы работаем с крайним элементом коллекции, чтобы не уйти в ошибку, нужно использовать в цикле size()-1 и от него уже плясать.
int count = 1;
int countMax = 1;
for (int i = 0; i < list.size()-1; i++) {
    if (list.get(i).equals(list.get(i+1))) {
        count++;
        if(count > countMax) countMax = count;
    }
    else count = 1;
}
Serg
Уровень 16
15 мая, 13:09
Была ошибка с числами больше 127. Ок я понял что так как тип Integer и он ссылочный то при "==" происходит сравнение ссылок. но почему тогда работало для чисел ниже 127? Числа ниже 127 примитивного типа и хранятся прямо в ячейке списка ?
Denis
Уровень 27, Казань, Россия
17 мая, 17:23
Тут можешь ознакомиться подробнее Всё дело в методе Integer.valueOf() который может кэшировать значения от -128 до 127 включительно, , если число превышает границы, то создается объект Integer и значение хранится в нём
public static Integer valueOf(int i) {
       if (i >= IntegerCache.low && i <= IntegerCache.high)
           return IntegerCache.cache[i + (-IntegerCache.low)];
       return new Integer(i);
   }
Соответственно в пределах -128 ... 127 у нас сравниваются сами значения при использовании оператора "==", а за пределами - ссылки на объекты Integer
gypsy potassium
Уровень 9, Урюпинск
29 мая, 09:51
Мне ИДЕ подсветила == и предложила сделать сравнение по-взрослому, через метод equals(). Я послушался и брат жив.