С возвращением в серию ежедневных практических занятий LeetCode. Сегодня особенный, так как я впервые не решил все задачи, которые начал, и я думаю, что вы узнаете гораздо больше из задачи, которую я не решил. чем те, которые я делал. Если вам нужна статистика: 4 простых задачи решены за 30 минут.
Что такое панграм?
Давайте еще раз попробуем вчерашнее упражнение. Попробуйте сделать обоснованное предположение об определении панграммы на основе решения:
Статистика:
- Мне было немного лень писать там английский алфавит, но мне сказали, что он не часто меняется, поэтому я оставил его на этом
- Обратите внимание, насколько близка к реальному предложению однострочник. Это магия синтаксиса Python
Мы делали это раньше
Я думаю, что название проблемы объясняет это довольно хорошо. Вот как это сделать
Статистика:
- Я мог бы сделать это и в одну строку, но я чувствовал, что дополнительная переменная действительно упрощает понимание.
Наконец, еще одна проблема с деревом
Цель состояла в том, чтобы найти длину кратчайшего пути от корня до листа. Один из способов сделать это:
Статистика:
- Рекурсия — наш лучший друг, когда дело доходит до деревьев, так что это название игры.
- Обратите внимание, что все условия if связаны с пограничным случаем, когда корень не является листом.
- Конструкция float(‘inf’) — это способ написать infinity в Python, я несколько лет не знал об этом.
Не много, но честная работа
Арифметическая прогрессия — это последовательность чисел, каждое последующее число которой увеличивается на постоянную величину. Что-то вроде этого:
Статистика:
- Я хотел подумать о разумном способе сделать это, я действительно хотел. Может быть, использовать понимание списка, добавить лямбда-функцию, может быть, даже использовать что-то из Numpy. Но в итоге я создал решение, совершенно не относящееся к Python.
- Обычно, когда люди меняют язык, например, с C на Python, они склонны писать код в том же стиле, что и на предыдущем языке.
- Это приводит к тому, что код не является Pythonic, что означает, что люди, привыкшие много читать на Python, будут нести дополнительные когнитивные затраты при чтении вашего кода. Это похоже на чтение книги с плохой грамматикой: даже если вы все еще понимаете, это требует усилий.
- Для коротких фрагментов кода, подобных этому, вам может сойти с рук это, если вы соблюдаете базовые правила синтаксиса, такие как использование функции enumerate().
Претендент
Если вы сосредоточитесь только на написании кода, вдохновленного Python, и хвастаетесь, вы можете упустить момент производительности кода. Для этой проблемы я рекомендую вам зайти на LeetCode, прочитать его, а затем попробовать реализовать. Затем вернитесь, чтобы увидеть мое решение. Я подожду, обещаю.
Итак, вот результат предыдущего фрагмента кода:
Итак, что случилось?
Прежде всего, я изначально написал это решение, используя понимание списков вместо выражений генератора. Вы можете прочитать о генераторах здесь, но основная идея заключается в том, что иногда вы создаете список, даже если вы собираетесь перебирать его только по одному элементу за раз. Чтобы сообщить Python, как должны выглядеть ваши элементы, но не заполнять память значениями, вы используете генераторы.
Затем, думая, что Превышен лимит памяти был ошибкой с моей стороны, я уверенно представил решение. И я получил сообщение «Превышено время», кошмар любого конкурентоспособного программиста. Это означает, что мое решение слишком медленное, чтобы работать в разумные сроки, поэтому мне нужно переосмыслить его с нуля.
Дело в том, что я мог легко предсказать, что мое решение будет слишком медленным, всего лишь прочитав раздел ограничений задачи. Создание всех подстрок строки из 1000 символов означает создание 2¹⁰⁰⁰ строк. Слишком много, чтобы просмотреть.
Я вернусь завтра с кодом, который работает, так что следите за обновлениями.
Заключительные мысли:
- Я нахожу забавным, что мне потребовалось так много времени, чтобы не решить задачу в отведенное время. Я считаю, что это может быть прекрасным примером Закона Паркинсона: работа расширяется, чтобы заполнить время, доступное для ее завершения.
- Из других новостей, сегодня я также удалил приложение Medium со своего телефона. Это упростило доступ к статистике моих статей из интерфейса и заставило меня зацикливаться на количестве просмотров и прочтений.
- Это плохо. Я не хочу, чтобы Medium давал мне еще одну цифру для оценки моей ценности. Это лишило бы меня свободы, я бы начал писать статьи люди хотят читать вместо статей я хочу писать.
- Теперь нет абсолютно ничего плохого в желании написать самую вирусную статью, заработать много денег и создать огромное количество подписчиков. Черт возьми, возможно, я тоже когда-нибудь захочу попробовать это сделать, и когда я это сделаю, я обещаю вам, что продам наиболее эффективным способом, я стану профессионалом в сборе внимание, эмоции, полемика, все, что нужно, чтобы увеличить эти цифры и получить этот хлеб. Поверь мне, ты увидишь это за милю, если я это сделаю.
- Но сейчас я просто хочу написать. Каждый день. Как я сказал, я бы. Я сделаю это для себя. Пока я буду выпускать по одной статье в день, в течение 100 дней, даже в самые тяжелые дни, я смогу сказать, что я свободен.