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

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

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

Ссылка на GitHub: https://github.com/ZheglY
Download Telegram
В Python есть зарезервированные ключевые слова — это слова, которые нельзя использовать как имена переменных, функций или классов. Они встроены в язык и несут особое значение.

📌 Идентификаторы — это имена, которые вы придумываете сами: названия переменных, функций и т.д. Они:

• чувствительны к регистру (MyVar ≠ myvar);

• должны начинаться с буквы или подчёркивания;

• не могут быть ключевыми словами.

❗️ Всегда проверяй, чтобы имя переменной не совпадало с ключевым словом, иначе будет ошибка — SyntaxError.

💡Небольшая статья на эту тему ключевых слов и идентификаторов в Python 👇
https://ravesli.com/keywords-identifiers-python/

t.me/IT_Python_ZheglY | #articles #python
🔥Как работает логический оператор XOR:

• Числа переводятся в биты и с помощью логической операции ИЛИ, и сравниваются по правилу:

x ^ x = 0
x ^ 0 = x

• Таким образом запись 4 ^ 1 будет выглядить так:

100 (4)
^ 001 (1)
-------
101 (5)

💡 Как работает цикл XOR из задачи выше #136: Single Number:

nums = [4, 1, 2, 1, 2]

result = 0 ^ 4 → 4
result = 4 ^ 1 → 5
result = 5 ^ 2 → 7
result = 7 ^ 1 → 6 ← 1 встретилось второй раз — "удалилось"
result = 6 ^ 2 → 4 ← 2 тоже встретилось второй раз — "удалилось"

❗️Однако проще это представить таким способом:

= 4 ^ 1 ^ 2 ^ 1 ^ 2
= (1 ^ 1) ^ (2 ^ 2) ^ 4
= 0 ^ 0 ^ 4
= 4

📌 Итоги и доп. материал:

XOR не знает, что число повторяется, но результат операции ведёт себя так, будто повторяющиеся числа удаляются.Если число встречается дважды, результат будет такой, будто его не было вообще.
Это делает XOR идеальным инструментом для задач, где нужно "удалить дубли".

Больше о различных логических операторах👇
https://www.geeksforgeeks.org/python-bitwise-operators/

Подробнее о XOR 👇
https://javarush.com/groups/posts/operator-xor-v-python

#articles #python
🐍 *args | **kwargs — Важны звёздочки, а не имена!

🗣 В
Python распаковку аргументов делают операторы * и **. А args, kwargs — это просто соглашения по имени, ты можешь называть их как угодно!

🌟 Что делают звёздочки:

* — собирает все переданные позиционные аргументы в кортеж.
** — собирает все переданные именованные аргументы (ключ=значение) в словарь.

Можно писать так, и работать будет одинаково:

def func(*args, kwargs):
pass

def func(*anything, **hello):
pass


💡Вывод:

📌Звёздочки — это настоящие операторы, а имена вроде args и kwargs — просто соглашение ради читаемости.

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

🖥 Больше информации о args и kwargs можно прочесть тут:
https://sky.pro/wiki/python/rabota-s-argumentami-v-python-args-i-kwargs/

t.me/IT_Python_ZheglY | #articles #python
🔥3👍2
🔥Задача с 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
💡 Что такое оценка алгоритма и зачем она нужна?

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

⏱️ Временная сложность (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
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
🔜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
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
🔥Задача с 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