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

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

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

Ссылка на GitHub: https://github.com/ZheglY
Download Telegram
📚 Лучшие книги по Python — подборка для системного изучения # 4

🧑‍💻 Алгоритмы и структуры данных

1. "Грокаем алгоритмы" — Адитья Бхаргава
Самая популярная книга для визуального изучения алгоритмов. Простым языком и с иллюстрациями объясняет: двоичный поиск, рекурсию, сортировки, графы, хэш-таблицы и др. Подходит для подготовки к LeetCode и собеседованиям.


📊 Анализ данных

2. "Python for Data Analysis" — Уэс МакКинни
Библия для анализа данных на Python. Автор — создатель библиотеки Pandas.
В книге: Pandas, NumPy, очистка и подготовка данных, визуализация, временные ряды.
Обязательно к прочтению для аналитиков и дата-сайентистов.

‼️ Книги можно скачать в коментариях 👇

@IT_Python_ZheglY |#КнигиПоПрограммированию
🔥LeetCode: Valid Parentheses — #20
Проверяем, правильно ли расставлены скобки ()[]{}

Пример:

"( { [ ] } )" → Верно
"( ) [ ] { }" → Верно
"( ]" → Неверно

🧠 Как работает код:

1. Открывающие скобки кидаем в stack

2. Eсли стек пуст или скобки не совпадают возвращаем False

3. Если всё ок — убираем из стека скобку

В конце стек должен быть пуст, это значит скобки правильно закрыты

💡Подробное видео решение
https://neetcode.io/problems/validate-parentheses

t.me/IT_Python_ZheglY | #LeetCode
🔥 Что такое NeetCode и почему это круто для изучения алгоритмов?

NeetCode — это тщательно отобранная коллекция задач по алгоритмам и структурам данных, организованная в виде удобного дерева знаний.

💭 Зачем нужен NeetCode если есть более известная платформа Leetcode?

NeetCode даст вам больше в плане обучения. За вас продумали детальный план, который помогает системно прокачивать навыки, шаг за шагом, от простых тем и задач к сложномым. А качественные видеоразборы к каждой теме и задаче помогают лучше усвоить материал!

Чёткая структура: задачи разбиты по темам и подтемам — как ветви дерева, чтобы не запутаться и видеть прогресс.

Оптимальный порядок: сначала базовые понятия, затем более сложные — ты учишься последовательно.

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

Экономия времени: не нужно искать задачи в разных местах — всё под рукой.

💡Если ты хочешь чёткий, понятный план и быстрое погружение в практику, жми на ссылку снизу! 👇
https://neetcode.io/roadmap
🔥 Разбор задачи LeetCode #121: Best Time to Buy and Sell Stock

Дан массив цен на акцию prices, где prices[i] — цена акции в день i. Нужно найти максимальную прибыль, купив и продав акции ровно один раз (купить раньше, чем продавать). Если прибыль получить нельзя, вернуть 0.

Пример:

[7,1,5,3,6,4] -> 5
Покупаем в день 2 (цена = 1) и продаем в день 5 (цена = 6), прибыль = 6-1 = 5.

[7,6,4,3,1] -> 0 # максимальная прибыль 0

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

1. Проходим по массиву цен, отслеживая минимальную цену покупки на текущий момент.

2. В каждый день вычисляем потенциальную прибыль, если продать акцию именно сегодня (текущая цена минус минимальная цена).

3. Обновляем максимум прибыли, если текущая прибыль больше предыдущего максимума.

💡Подробное видео решение
https://neetcode.io/solutions/best-time-to-buy-and-sell-stock

t.me/IT_Python_ZheglY | #LeetCode
🔥1
IT-PythonHub-LeetCode pinned «📚 Лучшие книги по Python — подборка для системного изучения # 1 🔰 Новички и средний уровень 1. "Изучаем Python" — Марк Лутц (2 тома) Классика. Огромный, но невероятно подробный справочник по Python. Подходит для тех, кто хочет основательно выучить язык с…»
В Python есть зарезервированные ключевые слова — это слова, которые нельзя использовать как имена переменных, функций или классов. Они встроены в язык и несут особое значение.

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

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

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

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

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

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

t.me/IT_Python_ZheglY | #articles #python
🎁 Бонусные книги

• "Чистый код" — Роберт Мартин
Книга, обязательная к прочтению каждому айтишнику! Библия по написанию читаемого, поддерживаемого и качественного кода. Учишься писать так, чтобы код «говорил сам за себя». Примеры приведены на Java, но принципы универсальны для любого языка.

• «Проект Феникс» — Джин Ким, Кевин Беар, Джордж Спэффорд
Это не книга про алгоритмы и код, а вдохновляющий история о том, как команда IT-специалистов спасает провальный проект и внедряет DevOps-подходы. Этот роман помогает взглянуть масштабно на процессы работы в IT и понять, как технологии влияют на успех бизнеса.
Обязательно для разработчиков, тимлидов и менеджеров!

‼️ Больше книг в репостах! Книги можно скачать в коментариях 👇

#КнигиПоПрограммированию
💡 Obsidian — лучшая программа для заметок, о которой ты (возможно) ещё не знал!


Что такое Obsidian?

Obsidian — это локальный, быстрый и гибкий редактор заметок на Markdown, построенный вокруг идеи гиперсвязанных знаний.
Ты не просто пишешь заметки — ты создаёшь сеть идей, между которыми можно перемещаться, как между нейронами.


🔥Ключевые возможности Obsidian

📝 Markdown — лёгкий, чистый и вечно поддерживаемый формат. Пиши без отвлечения.

🔗 Двусторонние ссылки — связывай заметки между собой которые помогут структурировать информацию и будут отображаться в виде паутины знаний

🧠 Граф знаний — визуализация всех твоих заметок и связей между ними. Это словно видеть, как работает твой мозг.

🗂 Локальное хранение — все файлы хранятся на твоём устройстве. Ты владеешь своими данными.

💬 Встроенные теги, вложенные папки, быстрый поиск — находи нужное за секунды.

🔌 Плагины — десятки расширений: от планировщиков, до AI-помощников и календарей.

t.me/IT_Python_ZheglY | #articles
🔻Скачать Obsidian 👇
https://obsidian.md/download

💡Вводный видеоролик, который отлично объясняет базовые концепции: граф знаний, ссылки, плагины и настройку:👇
https://www.youtube.com/watch?v=zYlDnmlo39Q&t=1357s

🔥Obsidian — это не просто приложение для заметок, а гибкая экосистема, которую можно прокачать под себя с помощью сообщества плагинов. Следующий пост будет посвящен выбору плагинов для Obsidian.

Самостоятельно повыбирать плагины можно здесь 👇
https://obsidian.md/plugins

🛠 Как установить и включить плагины в Obsidian:

1. Перейди в:
Settings → Community plugins → Turn off Safe Mode → Browse

2. Найди нужный плагин, например:
Sliding Panes (Andy's Mode)

3. Нажми Install, а затем Enable

🎉 Готово — интерфейс и функции изменятся автоматически!
(Если нет — просто перезапусти Obsidian)

t.me/IT_Python_ZheglY | #articles
🔥 Топ самый популярных плагинов для Obsidian #1

📅 Calendar
Базовый, но очень удобный — нужен почти всем. Дает визуальный календарь и поддержку ежедневных заметок.
https://obsidian.md/plugins?id=calendar

📓 Periodic Notes
Работает вместе с Calendar. Помогает вести логи по дням, неделям, месяцам.
https://obsidian.md/plugins?id=periodic-notes

📊 Dataview
Самый мощный плагин для превращения е Markdown-заметок в интерактивные базы данных с помощью простого языка запросов, похожего на SQL
https://obsidian.md/plugins?id=dataview

📌 Tasks
Гибкая система задач: теги, дедлайны, статусы — всё в Markdown. Заменяет отдельные таск-менеджеры.
https://obsidian.md/plugins?id=obsidian-tasks-plugin

🗃 File Tree Alternative
Улучшенная боковая панель с папками и превью. Особенно полезен при больших хранилищах.
https://obsidian.md/plugins?id=file-tree-alternative

📝 Templater
Автоматизирует создание заметок: можно вставлять дату, переменные, даже писать мини-скрипты.
https://obsidian.md/plugins?id=templater-obsidian

✍️ Excalidraw
Лучший визуальный инструмент прямо внутри Obsidian. Майндмэпы, схемы, наброски — всё в одном.
https://obsidian.md/plugins?id=obsidian-excalidraw-plugin

#Плагины
🔥Разбор задачи Valid Palindrome (LeetCode #125)

Нужно определить, является ли строка палиндромом — читается ли она одинаково вперёд и назад, игнорируя пробелы, регистр и знаки препинания.

"Madam" -> True
"Was it a car or a cat I saw?" -> True
"race a car" -> False

💡Пояснение кода:

• Перебираем каждый символ в строке string и приводим все буквы к нижнему регистру если если символ — буква или цифра.

• Собираем все такие символы обратно в одну строку clean.

• Сравниваем clean с её перевёрнутым вариантом.

Другие способы решения можно посмотреть здесь👇
https://neetcode.io/solutions/valid-palindrome

t.me/IT_Python_ZheglY | #LeetCode
🔥3
🔥Разбор задачи LeetCode #136: Single Number

• Дан массив чисел, в котором все числа встречаются дважды, кроме одного — найти этот единственный элемент.

Input: [2, 2, 1]
Output: 1

💡 Идея решения и разбор кода:
• Используем XOR — побитовое исключающее ИЛИ
• Если применить XOR ко всем элементам массива, пары исчезнут и останется только один уникальный элемент.

1. Инициализируем переменную result значением 0 (переменная будет хранить промежуточный результат операции XOR)

2. Проходимся по циклу сравнивая биты чисел. Если биты совпадают — результат 0, иначе 1.

x ^ x = 0
x ^ 0 = x

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

📊 Сложность:
Время: O(n), где n — длина массива.
Память: O(1).

Ссылка на задачу LeetCode👇
https://leetcode.com/problems/single-number/description/

❗️Более подробно о логического оператор XOR разборем в следующем посте

t.me/IT_Python_ZheglY | #LeetCode
🔥1
🔥Как работает логический оператор 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
👏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