Здравствуйте, рад вашему возвращению на серию ежедневных тренировок LeetCode. Сегодня я решил 1 среднюю задачу и 2 легкие. Итак, я достиг своей цели, теперь все, что мне нужно сделать, это написать о них. Не может быть так сложно, я делал это раньше…

Коды Грея… или почему лучший предсказатель успеха — предыдущий успех



Статистика:

  • Должен быть честным с вами, я уже решал эту задачу раньше, несколько раз. В старших классах я участвовал во множестве олимпиад по алгоритмам, поэтому практиковался в решении определенного набора «классических задач».
  • Это не значит, что на этот раз я сразу понял это, мне все же потребовалось некоторое время, чтобы вспомнить, но я не застрял. Это та же самая ситуация, с которой вы столкнетесь, если будете много практиковаться в LeetCode: во время собеседования вы сохраните большую часть своих интуитивных догадок, выработанных с течением времени
  • Идея проста: думать рекурсивно. Если вы знаете коды Грея длины n-1, все, что вам нужно, это склеить их вместе в зеркальном отображении.
  • Если вы сделаете это, то середина нового кода будет состоять из двух одинаковых чисел, а все остальные гарантированно будут отличаться ровно на одно число.
  • Таким образом, вам может прийти в голову блестящая идея прикрепить новую цифру слева от каждого предыдущего кода, который должен быть одинаковым для первой половины, то же для второй половины, но другие в месте встречи

короткий



Статистика:

  • Честно говоря, самым сложным в этом было понять, что речь идет о строках, а не о столбцах.
  • Ничего сложного не выпендривался, можно просто переходить к следующему

Длинный



Статистика:

  • По сравнению с предыдущей проблемой, это действительно потребовало некоторой работы.
  • Что я сделал, так это подсчитал частоты каждого числа, а затем получил значения максимальной частоты.
  • Наконец, я получил первое и последнее появление каждого такого числа и выбрал тот, у которого наименьшая разница в индексах.
  • Что может показаться вам интересным, так это строка 11, которая изменяет функцию max по умолчанию, давая ей лямбда-функцию, которая применяется к каждому элементу перед сравнением.
  • Лямбда-функции — это способы определения краткой временной функции, чтобы не засорять пространство имен правильным определением функции; они полезны для функций, которые принимают другие функции в качестве аргументов, например карта или фильтр.

Заключительные мысли:

  • Я начал эту серию менее 2 недель назад, но я уже чувствую, что она идет уже очень долго
  • В первом посте я сказал, что буду поддерживать это в течение 100 дней, ия буду
  • Буду ли я наслаждаться всеми 100 днями? Всегда ли я найду что-то новое и полезное для написания? Буду ли я на 100 % гордиться каждой историей, которую публикую?Скорее всего, нет
  • Итак, в чем смысл? Если я чему-то и научился во время тренировок за последний год, так это тому, что вы должны делать некоторые вещи, даже если они бессмысленны, просто потому, что вы решили
  • Будет ли ежедневная привычка, которую вы решили начать сегодня, иметь значение завтра? Определенно нет. Изменится ли что-то через два дня? Все еще нет.
  • Может быть, через неделю?Очень мало. А через месяц? Вы можете начать замечать некоторый прогресс, но вы не будете знать наверняка.
  • А через год? Что ж, здесь начинается самое интересное, потому что после года занятий одним и тем же каждый день это фундаментально меняет вас.
  • То, чем вы постоянно занимаетесь больше года, становится частью вашей личности. Теперь это не еще одна вещь, которую вы пробуете, чтобы посмотреть, понравится ли она вам, это часть того, кто вы есть.
  • И людипостоянно этим занимаются: играют на инструментах, знают иностранные языки, умеют рисовать, владеют боевыми искусствами, умеют танцевать и т. д.
  • Но лично мне было очень трудно делать такие вещи. Раньше я всегда был воодушевлен каким-то навыком, представилкак это было бы, если бы я овладел этим навыком, попробовал бы это в течение недели > а затем сдаться, когда это перестанет быть интересным
  • Кроме того, я понял, что просто не могу мотивировать себя с помощью рациональных аргументов. Поэтому независимо от того, насколько веские доводы я создаю в своем уме, чтобы аргументировать необходимость ежедневной практики навыка, в какой-то момент я вспомню аргументы и решу: «Да, больше не буду этого делать, извините, давайте займемся чем-нибудь другим».
  • Так что я просто больше не думаю о причинах, теперь просто решаю, а потом сжигаю мосты, чтобы не отступить.
  • А что, если вам случится посвятить себя на долгое время тому, что вам не особенно нравится? Что ж, не повезло. Вы все равно это сделаете. Считая это обучением для того времени, когда вы будете преследовать свою настоящую мечту.