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

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

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

Ссылка на GitHub: https://github.com/ZheglY
Download Telegram
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
🌳 Основные деревья в Python и их применение

🗣️ Деревья — иерархические структуры данных, где каждый узел (нода) имеет родителя (кроме корня) и потомков. Используются для представления файловых систем, иерархий данных, оптимизации поиска и сортировки. В Python нет встроенных деревьев, но их реализуют через классы или библиотеки (например, bigtree).

🔵Красно-черное — Самобалансирующееся BST. Основа словарей Python, СУБД.

🔵B+ -дерево — Оптимизировано для дисковых операций. Стандарт для индексов баз данных.

🔵Бинарная куча — Min/Max-куча для приоритетных очередей. Основа для алгоритма Дейкстры.

🔵AVL-дерево — Строго сбалансированное BST. Для систем с гарантированным временем поиска.

🔵Trie (Префиксное) — Хранит строки как цепочки символов. Для автодополнения и словарей.

🔵B-дерево — Многопутевое дерево для файловых систем. Оптимизация чтения/записи блоков.

🔵BST (Бинарное) — Базовое дерево поиска и понимания устройства | Учебные проекты.

🔵Общее дерево — Узлы с произвольным числом потомков. Для XML/JSON и иерархий.

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

базовые знание деревьев sky.pro

кратко об обходах и построениях

🔜Далее мы вместе подробнее изучим каждое дерево и разберем код их построения!

🧑‍💻@IT_Python_ZheglY | #python
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍9🤮1
🌳 Основные деревья в Python |Красно-чёрное дерево (КЧД)

🗣️ Красно-чёрное дерево (КЧД) — это умная структура данных, которая автоматически балансируется при добавлении или удалении элементов. Благодаря этому операции поиска, вставки и удаления работают за O(log n) — быстро даже для больших данных!

🔖 Основные правила:

🔵Цвета — каждый узел красный или чёрный.

🔵Корень и листья — всегда чёрные (листья — это пустые узлы NIL).

🔵Красные узлы — не могут быть родителями красных (нет двух красных подряд).

🔵Чёрная высота — на всех путях от корня до листьев одинаковое число чёрных узлов.

Как оно балансируется?
Если после вставки нарушаются правила, дерево перекрашивает узлы и делает повороты (влево/вправо).

Например, если два красных узла оказались рядом, один перекрашивается в чёрный.

💡 Зачем это нужно?
КЧД используется в базах данных, языковых библиотеках и везде, где важен быстрый поиск и динамическое обновление.

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

Основные знания Tproger

Код реализации можно посмотреть здесь: https://github.com/ersul4ik/rbt

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1210🤮1
🌳 Основные деревья в Python | Бинарная куча

Бинарная куча — это специальная древовидная структура данных, которая удовлетворяет свойству кучи

🔵 Min-куча: каждый родительский элемент меньше или равен своим дочерним элементам

🔵 Max-куча: каждый родительский элемент больше или равен своим дочерним элементам.

Это позволяет эффективно добавлять и извлекать элементы с наивысшим приоритетом, используя алгоритмическое время O(log n).

🔜В Python для работы с бинарными кучами используется встроенный модуль heapq, который реализует алгоритм очереди с приоритетами.

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

Официальная документация Python

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥106🥰2🤡1
Базовая реализация бинарной кучи (применение модуля heapq)

import heapq

print("🧠 БИНАРНАЯ КУЧА: ОСНОВНЫЕ СЦЕНАРИИ")

# 1. БАЗОВЫЕ ОПЕРАЦИИ
print("\n1️⃣ БАЗОВЫЕ ОПЕРАЦИИ")
numbers = [7, 2, 5, 9, 1, 3]
heap = numbers.copy()
heapq.heapify(heap)
print(f"Исходный: {numbers}")
print(f"Куча: {heap}")
print(f"Минимум: {heap[0]}")
print(f"Извлечение: {[heapq.heappop(heap) for _ in range(3)]}...")

# 2. MAX-КУЧА
print("\n2️⃣ MAX-КУЧА")
max_heap = [-x for x in [3, 1, 4, 5]]
heapq.heapify(max_heap)
print(f"Max-куча: {max_heap}")
print(f"Максимум: {-max_heap[0]}")

# 3. ПРИОРИТЕТНАЯ ОЧЕРЕДЬ
print("\n3️⃣ ПРИОРИТЕТНАЯ ОЧЕРЕДЬ")
tasks = []
heapq.heappush(tasks, (2, "Почистить код"))
heapq.heappush(tasks, (0, "Пофиксить баг!"))
heapq.heappush(tasks, (1, "Деплой"))

print("Очередь по приоритету:")
while tasks:
priority, task = heapq.heappop(tasks)
print(f"Приоритет {priority}: {task}")
🔥8👍4🤯3🤮1
🤡3🤮1💩1
Какой будет вывод этого кода?
Anonymous Quiz
49%
[1] [2]
15%
[1] [1, 2]
10%
[1, 2] [1, 2]
6%
[1] [2, 1]
20%
Ошибка
7👍6👏2🤮1🤡1
🌳 Основные деревья в Python | B+ дерево ( B+ tree )

Вы когда-нибудь задумывались, как базы данных мгновенно находят нужные записи среди огромного количества данных? Всё дело в эффективной структуре данных — B+ дереве.

🔖Основные особенности дерева:

🔵Все данные — в листьях. Внутренние узлы выступают лишь как «указатели» или «оглавление», что делает поиск по диапазону невероятно быстрым (например, «найти всех пользователей с 10 по 100»).

🔵Листья связаны в список. Это позволяет легко и быстро обходить все данные в отсортированном порядке.

🔵Высота дерева минимальна. Благодаря этому для поиска любой зап

🔜Где используется? Практически везде! Это основа индексов в MySQL, PostgreSQL, MongoDB и многих других СУБД. Именно B+-дерево позволяет им работать быстро и стабильно.

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

Базовые знания habr.com

Реализация дерева GitHub

🧑‍💻@IT_Python_ZheglY | #python #деревья
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍4👏4🤮1
🤮2🤡1