Вот последняя запись в серии ежедневных практических занятий LeetCode. Краткий итог: сегодня я решил 2 простые задачи за отведенное время 30 минут.

Хотя сегодня они были короче как для понимания, так и для реализации, чем обычно, я думаю, что есть чему поучиться у обоих.

Реверсирование строки в Python, 2 способа



Статистика:

Задача заключалась в том, чтобы поменять местами алфавитные символы в строке, оставив другие символы нетронутыми.

Вот поясняющий пример:

Первоначально я реализовал следующее решение:

В основном я начал с индексов left и right, и всякий раз, когда они оба были на букве, я менял местами эти символы. В противном случае я взял их ближе к середине.

Поскольку в Python строки являются неизменяемыми, это означает, что вы не можетеизменить символ на месте, как это возможно в C или C++ я решил сначала преобразовать строку в список односимвольных строк. Расставив все в правильном порядке, я еще раз преобразовал список обратно в строку.

Код выполняет свою работу, и решение легко понять, но слева направо условие индекса вызывает бельмо на глазу, которое появляется в общей сложности 4 раза. Кроме того, я столкнулся с несколькими условиями бесконечного цикла, когда я либо забыл оставшееся приращение, либо забыл проверить все ситуации. Этот тип кода является местом гнездования ошибок. И если вы заметили, вы можете быть уверены, что другие люди тоже заметят.

Это прекрасный пример возможности рефакторинга: взять код, который работает, но выглядит неэлегантно, и преобразовать его в код, который работает и проще в обслуживании. Даже если иногда это неблагодарная работа, каждый, кто будет взаимодействовать с вашим кодом в будущем, иногда дойдет до того, что будет восхищаться вашей работой, и вы сэкономите много человеческих ресурсов. часов. Одна конкретная книга, в которой прекрасно объясняются принципы поддержания чистоты кода, называется (что неудивительно) Чистый код Роберта К. Мартина. Я настоятельно рекомендую вам прочитать ее, если вы хотите стать мастером своего дела.

Итак, вот мое второе решение, которое в основном сработало, как только я закончил его писать. Хорошей эвристикой для определения количества ошибок, с которыми вы столкнетесь позже при сопровождении своего кода, является количество пограничных случаев (или ошибок), с которыми вам нужно справиться, когда вы сначала напишите это.

Итак, что я делаю сейчас, так это сначала создаю перевернутую строку с буквенными символами. Затем все, что мне нужно сделать, это просмотреть начальную строку, и если текущий символ не является алфавитным, я добавлю его в решение. В противном случае я добавляю следующий символ в перевернутую строку.

Честно говоря, единственной ошибкой, которую я мог сделать, было бы забыть увеличить i в 10-й строке.

Также обратите внимание, как мы перешли от двух вложенных циклов while и одного условия if к одиночному for и если. Чем меньше решений вам приходится принимать, тем легче ваша жизнь. То же самое касается вашего кода.

Самое быстрое решение на данный момент



Статистика:

Цель состояла в том, чтобы проверить, является ли определенное число n «уродливым», то есть оно имеет только 2, 3 и/или 5 в его разложении на простые числа. . Звучит просто? Это потому что так!

Без лишних слов, вот решение:

Если бы я не забыл пограничный случай в строке 3, время решения составило бы менее минуты. И, возможно, ваш тоже! Если вы когда-нибудь получите такую ​​простую задачу для собеседования, можете быть уверены, что настоящим испытанием будет контроль над желанием спешить. Если вы закончите быстрее, просмотрите решение еще раз и подумайте о том, что вы могли пропустить.

И это потому, что правда в том, что как только вы запустите свой код и он заработает, шансы на то, что вы повторите его еще раз, чтобы проверить на наличие ошибок, падают до 0. Я думаю, что это естественная реакция, так как никто не хочет тратить время на отладку кода, который, кажется, работает так, как задумано! Решение состоит в том, чтобы eустранить эту положительную предвзятость по отношению к коду, который, как мы видим, работает, не запуская решение, пока мы не убедимся, что логика работает правильно. Иногда возникает искушение проигнорировать этот совет, но он в конечном итоге окупается.

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

  • Иногда вы чувствуете, что делаете все возможное, чтобы улучшить свою жизнь, но все еще чувствуете себя подавленным, обеспокоенным или даже немного безнадежным.
  • Для меня большинство таких случаев были из-за недостатка сна или физического истощения. Это точно так же, как когда вы видите ребенка, плачущего из ниоткуда, а затем его родители понимают, что это потому, что ребенок устал и хочет вздремнуть, но не имеет самосознания, чтобы выразить свою потребность.
  • И я нахожу это действительно забавным. Кажется, мы на самом деле не так сильно взрослеем, мы просто учимся более убедительно рационализировать.
  • Так что да, если вы недавно чувствовали себя подавленным, постарайтесь сделать это немного медленнее и убедитесь, что у вас в порядке сон и питание, это может иметь большее значение, чем вы думаете.