IT-PythonHub-LeetCode
292 subscribers
35 photos
10 videos
34 links
🚀 Добро пожаловать в IT канал — твой проводник в мире программирования и алгоритмов!

📚 Полезные материалы по Python программированию и алгоритмам.

🔥Разборы LeetCode задач с реальных собеседований

Ссылка на GitHub: https://github.com/ZheglY
Download Telegram
🔥Задача с LeetCode #344: Reverse String

Необходимо развернуть список символов in-place, т.е. без создания нового списка.

Input: ["n","e","e","t"]
Output: ["t","e","e","n"]

💡Идея решения:

• Создаём два указателя — left в начале, right в конце.

• Пока они не встретятся, меняем местами s[left] и s[right].

• После каждой замены сдвигаем указатели навстречу друг другу.

💡Альтернативное решение:
def reverseString(s):
s.reverse()


🖥 Подробное видео решение можно посмотреть здесь👇
https://neetcode.io/solutions/reverse-string

@IT_Python_ZheglY | #leetcode #python
4
👏4🔥3
💡 Что такое оценка алгоритма и зачем она нужна?

Оценка алгоритма — это способ понять, насколько эффективно работает код: по времени выполнения и объёму используемой памяти.

⏱️ Временная сложность (Time Complexity) — показывает, как изменяется время выполнения алгоритма при росте объёма данных. Ниже — от лучших к худшим:

O(1) — константное время. Алгоритм работает одинаково быстро при любом размере входа.
Пример: доступ к элементу массива по индексу

O(log n) — логарифмическая сложность. Алгоритм быстро сужает область поиска.
Пример: бинарный поиск в отсортированном массиве

O(n) — линейная сложность. Время растёт пропорционально числу элементов.
Пример: пройтись по массиву и найти максимум

O(n log n) — эффективно масштабируется, часто встречается в быстрых сортировках.
Пример: Merge Sort, Heap Sort

⚠️ Сложности, которых стоит избегать:

🚫 O(n²) — квадратичная сложность, характерна для вложенных циклов.
Пример: пузырьковая сортировка, сравнение всех пар

🚫 O(n³) — кубическая сложность, обычно три вложенных цикла.
Пример: наивное перемножение матриц

🚫 O(2ⁿ) — экспоненциальная. Время выполнения удваивается с каждым шагом.
Пример: рекурсивный подсчёт чисел Фибоначчи

🚫 O(n!) — факториальная. Перебираются все возможные варианты.
Пример: задача коммивояжёра, генерация всех перестановок

Прочесть более подробно о Big O можно здесь: 👇
https://habr.com/ru/articles/782608/

@IT_Python_ZheglY | #python
👏9🔥8
🔥 ТОП сортировок: что важно знать разработчику и на собеседовании?

В мире алгоритмов сортировки есть много разных вариантов, но какие действительно часто встречаются в продакшене и на собеседованиях?

😀 Почему это важно?
На собеседованиях часто спрашивают именно Quick Sort, Merge Sort и Tim Sort — это базовые алгоритмы, которые нужно знать хорошо. Остальные — полезны для расширения кругозора и понимания узких случаев.

— используется в продакшене

🔥 — часто спрашивают на собеседованиях

📚 — часто используется для обучения и объяснения основ

📌 В следующих постах разберем способы сортировки на примере кода

[IT-PythonHub-LeetCode](t.me/IT_Python_ZheglY) | #Сортировки
Please open Telegram to view this post
VIEW IN TELEGRAM
10🥰6👏6🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🫧 Принцип сортировки пузырьком (Bubble Sort)

🔜Сортировка пузырьком — это простой алгоритм сортировки, который многократно проходит по списку, сравнивая пары соседних элементов и меняя их местами, если они идут в неправильном порядке. Таким образом, большие элементы "всплывают" в конец списка, как пузырьки в воде.

📌 Подходит для:

🔵учебных и демонстрационных целей.

🗣️ Алгоритм стабилен и легко понимается, но медленный (O(n²)) — применяется в основном для обучения.

🔵Средняя O(n²)

🔵Худшая O(n²)

🔵Память O(1) — работает на месте

def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # Флаг для оптимизации
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
# Меняем элементы местами
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break

data = [5, 1, 4, 2, 8]
bubble_sort(data)


@IT_Python_ZheglY | #Сортировки #Python
Please open Telegram to view this post
VIEW IN TELEGRAM
15👏11👍9
This media is not supported in your browser
VIEW IN TELEGRAM
💡Insertion Sort — сортировка вставками

🔜Сортировка вставками — это один из самых простых алгоритмов сортировки. Он проходит по массиву слева направо, постепенно строя отсортированную часть: каждый новый элемент вставляется на своё место относительно уже отсортированных элементов.

📌 Подходит для:

🔵небольших массивов (до ~100 элементов),

🔵почти отсортированных данных,

🔵учебных и демонстрационных целей.

🗣️ Простой в понимании и реализации, но медленный при больших объёмах данных.

🔵Средняя O(n²)

🔵Худшая O(n²)

🔵Память O(1) — работает на месте

def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1

while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key

data = [5, 3, 4, 1]
insertion_sort(data)


@IT_Python_ZheglY | #Сортировки@IT_Python_ZheglY
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰10👏6🔥41
This media is not supported in your browser
VIEW IN TELEGRAM
🔜Radix Sort — поразрядная сортировка

Radix Sort — это нестандартный, но очень мощный алгоритм сортировки. В отличие от большинства алгоритмов, он не использует сравнение элементов. Вместо этого сортирует числа поразрядно: от младшего разряда к старшему (или наоборот).

📌 Плюсы:

🔵Подходит для очень больших массивов чисел

🔵Стабильный способ сортировки (сохраняет порядок равных элементов)

🔵Хорошая скорость сортировки: O(n·k) | k — количество разрядов числа.

Минусы:

🔵Требует дополнительной памяти: O(n + k)

🔵Не подходит для вещественных чисел или отрицательных

🗣️ Этот способ сортировки почти не используется в продакшене из-за выского потребления памяти, но может встречаться на собеседованиях!

@IT_Python_ZheglY | #Сортировки #python
Please open Telegram to view this post
VIEW IN TELEGRAM
14👏7👍5🔥1
🎙 Подкаст: " Путь в 1000 шагов" Содержательные имена

💡Что должно содержать в себе название переменной? Какая длинна имени оптимальна? Как придумать подходящее имя?
Все о содержательных именах в данном подкасте!

📌 Таймлайны:

▫️00:00-02:15 – Почему имена это фундамент чистого кода?

▫️02:20-06:00 – Чем руководство ваться в выборе имени? Примеры правильных и неудачных именований.

▫️06:10-11:30 – Дезинформации в именованиях. Разбор частых ошибок при выборе имен переменных.

▫️11:50-16:30 – Чем опасны схожие имена переменных и как это исправить? Использование каких слов стоит избегать в переменных?

▫️16:30-20:30 – В чем важность использования удобопроизносимых имен?

▫️20:30-30:00 – Что не стоит писать в именах переменных? Практические советы и общепринятые паттерны при выборе имен.

▫️30:3-36:08 – Корректные переводы и имена пространства задач. Какая оптимальная длинна имени переменной?

🎧 Ссылка на выпуск: 👇
https://music.yandex.ru/album/18513266/track/108941203?utm_source=web&utm_medium=copy_link
👍1711🔥11🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
🔔 Полезные IT мероприятия | Как стать Тимлидом ❗️

Яндекс проведет Dream → Teamlead конференцию которая поможет тебе прокачать управленческие навыки.

📌 Что будет?

🔵 Мастер-классы — разборы реальных кейсов
🔵 Консультации от топ-лидеров: Максим Дорофеев, Александр Ложечкин (CIO Райффайзен Банка), Анатолий Панов (СТО Яндекс Карт) и другие
🔵 Живые дискуссии и дебаты — бери ноутбук, свои кейсы и проверяй свои навыки!

📍Где:
Москва, офис Яндекса,
ул. Льва Толстого, д.16

🔜Когда:
19 июля | 11:00 — 19:00

🔗 Для участия регистрируйся по ссылке 👉 здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
21🥰12👍11👏8😁2
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Counting Sort — сортировка подсчётом

🔜Counting Sort — это алгоритм сортировки, который подсчитывает, сколько раз каждое значение встречается, а затем восстанавливает отсортированный массив на основе этих подсчётов.

📌Плюсы:

🔵Высокая скорость при небольшом диапазоне значений

🔵Стабильность (сохраняется порядок равных элементов)

🔵Простая реализация

🚫Минусы:

🔵Требуется дополнительная память

🔵Не работает с вещественными и отрицательными числами

🔵Малоприменим в реальных проектах
def counting_sort(arr):
max_val = max(arr)
count = [0] * (max_val + 1)

for num in arr:
count[num] += 1

index = 0

for i in range(len(count)):
while count[i] > 0:
arr[index] = i
index += 1
count[i] -= 1

@IT_Python_ZheglY | #сортировки| #python
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥9🥰6👏2💯2🤮1
🔥 Подкаст: "Путь в 1000 шагов" | Комментарии в коде

💡 Почему 90% комментариев только ухудшают читаемость кода? Как отличить полезный комментарий от вредного? Можно ли вообще писать код без комментариев?

Ответы — в новом выпуске! Вот главные моменты:

🔖 Таймлайн выпуска:

▫️00:00-07:15 — Почему 90% комментариев — это извинения за плохой код. Почему следует избегать этого?

▫️08:50-10:20 — Типы токсичных комментариев. Когда комментарии деструктивно влияют на код?

▫️10:20-17:10 — Когда комментарии имеют место быть? Виды полезеных комментриев и договоренности программистов

▫️17:20-27:16 — Какие комментарии не должны использоваться в коде? Примеры плохих комментариев.

🎹 Ссылка на выпуск:
https://music.yandex.ru/album/18513266/track/110991282?utm_medium=copy_link
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥12🥰11🤮1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Merge Sort — сортировка слиянием

Merge Sort — один из самых известных и фундаментальных алгоритмов сортировки, используемый в продакшене. Основан на принципе "разделяй и властвуй": делит массив, сортирует части и сливает их в упорядоченный результат. Стабильный, предсказуемый и надёжный.

📌Плюсы:

• Хорошая гарантированная сложность даже в худшем случае O(n log n)

• Стабильная сортировка — сохраняет порядок равных элементов

• Хорошо работает с большими объемами данных

⚠️ Единственный недостаток:

• Требует дополнительной памяти O(n), потому что создаёт новые массивы при слиянии.

🗣️ Также встречается в собеседованиях как классический пример сортировки "разделяй и властвуй".

@IT_Python_ZheglY | #сортировки
Please open Telegram to view this post
VIEW IN TELEGRAM
23🔥14👍12💯6🍓2💋2🤮1🍾1
💡Реализация Merge Sort на языке Python 👇
def merge_sort(arr):
if len(arr) <= 1:
return arr

mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])

return merge(left, right)

def merge(left, right):
result = []
i = j = 0

while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1

result.extend(left[i:])
result.extend(right[j:])
return result
19🔥14👍10💩1
🎙 Подкаст "Песочница": Чем отличается Junior от Middle и Senior?

💡В чем различие между Junior, Middle и Senior разроботчиком? Какие Hard и Soft скиллы необходимы для получения грейда? Какой рецепт быстрого роста в IT?

Все о карьере в IT в этом подкасте!

🔖 Таймлайн выпуска:

🔵00:00-03:30 – Кто такие Junior, Middle и Senior разработчики? Особенности каждого грейда.

🔵03:30- 6:30 – Какие Hard и Soft скиллы необходимы для Junior, Middle и Senior разработчика?

🔵07:00-15:40 – Middle | Каковы его задачи и как прокачивать свои навыки, чтобы стать Senior разработчиком?

🔵18:40-24:40 – Как понять момент перехода в другой грейд? Этап "Посвящение в рыцари".

🔵24:45-28:20 – Senior | Возможен ли быстрый рост? Получить новый грейд за год?!

🔵28:30-6:30 – Итоги | Ключевые различия между Junior, Middle и Senior. Необходимый технический и технологический опыт и "рецепты роста".

🎧 Ссылка на выпуск:
https://music.yandex.ru/album/16469736/track/87074010?utm_medium=copy_link
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥14👏10🤮1
🔥Задача с LeetCode #647: Palindromic Substrings

🔜Требуется подсчитать количество палиндромных подстрок в заданной строке.
Палиндром - это строка, которая читается одинаково как слева направо, так и справа налево.

Input: s = "aaa"
Output: 6
Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa"

💡Идея решения:

Алгоритм основан на идее, что каждый палиндром в строке имеет центр (или два центра для палиндромов четной длины). Он проходит по всем возможным центрам и "расширяется" в обе стороны, проверяя, образуется ли палиндром.

🔵 В нечетных палиндромах каждый символ рассматриваем как центр

🔵В четных палиндромах каждую пару соседних символов рассматриваем как центр

🖥Подробное видео решение можно посмотреть здесь

@IT_Python_ZheglY | #leetcode #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥98🍓2🤮1💋1
🔥Задача с Leetcode #206: Reverse Linked List

🔜Дана голова односвязного списка. Нужно развернуть список и вернуть новую голову.

Исходный список: 1 -> 2 -> 3 -> 4 -> 5
Развёрнутый: 5 -> 4 -> 3 -> 2 -> 1

🔖Разбор кода:

🔵prev (previous) - Хранит предыдущий узел, который станет следующим при развороте.

🔵curr (current) - Текущий узел, который мы обрабатываем.

🔵next_node - Временное хранилище для следующего узла перед разворотом

💡 Идея алгоритма:

🔵 Сохраняем next_node — чтобы не потерять следующий узел после изменения ссылки.

🔵 Разворачиваем ссылку — curr.next теперь указывает на prev.

🔵 Сдвигаем указатели — двигаем prev и curr вперёд.

🖥 Подробное решение можно посмотреть здесь

🧑‍💻@IT_Python_ZheglY | #leetcode #python
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7👏5🔥1🤮1🍓1
🔥 Подкаст "Путь в 1000 шагов". Классы и абстракции

💡 Что такое классы и абстракция? Какие есть способы инкапсуляции и декомпозиции? Как понять логику ООП и эффективно применять ее в проектах?

Все о "подводных камнях" в ООП рассказывают опытные разработчики в этом подкасте

🔖 Таймкоды выпуска:

🔵00:00-05:00 – Что такое класс и абстракция? Инкапсуляция в Python, метод init.

🔵05:50-7:00 – Как правильно объявлять константы?

🔵08:00-10:15 – "Подводные камни" приватных функций. Проектирование и тестирование кода.

🔵11:15-23:00 – Как выбрать имя для класса? Логика кода или как разбивать функциональность кода на классы?

🔵23:00-31:00 – Что такое SRP? Частые ошибки новичков в написании кода.

🔵31:30-35:00 – Декомпозиция при работе с классами.

🔵35:30-45:00 – Связность и согласованность классов и их методов. Как понять логику зависимостей?

🔵47:30-51:00 – Работа с абстракциями и итоги подкаста.

🖥 Ссылка на выпуск 👈

#Python #подкасты
Please open Telegram to view this post
VIEW IN TELEGRAM
9👏8👍3🤮1🍓1🍾1
🔥Что такое HTTP Response Codes? Какие основные коды и что о них нужно знать?

HTTP-коды ответов (Status Codes) — это трехзначные числа, которые сервер отправляет клиенту для информирования о результате обработки запроса.

📌 Информационные коды (1xx)

🔵100 Continue — Сервер получил заголовки запроса и ожидает тело запроса. Клиент должен продолжить отправку данных

🔵102 Processing — Сервер обрабатывает запрос, но ответ ещё не готов

💡Успешные коды (2xx)

🟢200 OK — Стандартный ответ для успешных HTTP-запросов.

🟢201 Created Запрос успешно выполнен, и на сервере создан новый ресурс

🟢204 No Content Сервер успешно обработал запрос, но не возвращает тело ответа

📌 Перенаправления (3xx)

🔵301 Moved Permanently Запрошенный ресурс навсегда перемещён на новый URL

🔵302 Found (или 307 Temporary Redirect) Ресурс временно доступен по другому URL

🔵304 Not Modified Сервер сообщает, что ресурс не изменился с момента последнего запроса.

🧑‍💻@IT_Python_ZheglY | #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍118👏8🔥2💩2🍾1
💡Http Response Codes 400 / 500

HTTP-коды состояния 400 (Client Error) и 500 (Server Error) — это две основные категории ошибок, которые указывают на проблемы при обработке запроса. Вот их ключевые различия и особенности:

⛔️ Ошибки клиента (4xx)

● 400 Bad Request Сервер не понял запрос из-за синтаксической ошибки

● 401 Unauthorized Требуется аутентификация

● 403 Forbidden Доступ запрещён

● 404 Not Found Сервер не нашёл запрашиваемый ресурс

● 405 Method Not Allowed Используется неподдерживаемый HTTP-метод

🚫 Ошибки сервера (5xx)

● 500 Internal Server Error — Общая ошибка сервера

● 502 Bad Gateway — Проблема с прокси-сервером или API

● 503 Service Unavailable — Сервер временно недоступен.

📚 Доп материалы для прочтения:

1. Полный список кодов с пояснениями от Mozilla
2. QaRocks

🧑‍💻@IT_Python_ZheglY | #python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🍓5👏4🦄4💩21🍾1