
Комментарии 25
HashMap занимает гораздо больше памяти, чем количество хранящихся в нём элементов.
Согласен ,но обычно затраты памяти берут условно при оценке алгоритма ,в данном случае оценка сводится к кол-ву элементов в хешмапе.
Затраты памяти берут совсем не условно, а в виде конкретной оценки. Для хеш-таблицы затраты памяти будут O(N), где N – максимальное возможное количество ключей, которое он способен хранить (а не то, которое там фактически хранится). Поэтому меньше размера массива в данном случае никак не получится.
>>В обоих случаях сумма всех нулей = 2
Прикольное заявление)
обоих случаях сумма всех нулей = 2
Точно сумма нулей == 2 ? А не 0? )))
Вы что тут устроили пехотинцы?
Отличная статья, как раз хотел начать изучение алгоритмов!!! Начну с нее)
Если currentSum равен 0, то можно просто взять i+1, это заведомо больше текущего maxLen
Ну и вспомогательный массив не нужен, преобразовывать 0 к -1 можно в основном цикле, например currentSum += arr[i] || -1;
Долго пытался понять формулировку: "суммы их кол-ва равны друг другу", суммы количества какие-то, почему было не написать: "количество нулей и единиц совпадает"?!
Эту формулировку можно даже сократить до "кол-во 0 и 1 равно", если уж на символах начали экономить.
Самой большой трудностью оказалось понять формулировку задачи. Поправьте как-нибудь
Не очень удачное объяснение. Почему надо искать текущую сумму в хешмапе-то? Вы так и не объяснили. После замены 0 на -1 вы сказали, что надо найти нибольший кусок с суммой ноль. Дальше надо было бы ввести понятие частичных сумм и указать, что сумма на отрезке есть разность двух таких сумм. И чтобы сумма отрезка была 0, у вас должны быть 2 одинаковые частичные суммы. И вот задача свелась к нахождению одинаковых чисел на наибольшем расстоянии друг от друга. Вот тут уже понятно, откуда взялся хешмап - вы просто запоминаете для каждого числа, где оно первый раз встретилось, и для каждого числа берете разницу между текущей позицией и первой как вариант ответа. И вот эта обработка 0 как особого случая тоже понятнее, если сначала ввести частичные суммы (их же n+1, и первая всегда 0).
И вообще, очень часто задачи, где фигурируют суммы на отрезках в массиве, решаются через частичные суммы. Так что их обязательно надо рассказать.
можно сразу в hasmap запихнуть ключ 0 со значением -1
Решение задачи про поиск наибольшего подмассива из 0 и 1, где сумма их кол-ва равна друг другу