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

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

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

Ссылка на GitHub: https://github.com/ZheglY
Download Telegram
🔥 Разбор задачи LeetCode #242: Valid Anagram

Даны две строки s и t. Нужно определить, являются ли они анаграммами друг друга.

Анаграмма — это слово, образованное путём перестановки букв другого слова.

s = "listen" t = "silent" -> True
s = "racecar" t = "carrace" -> True
s = "jar" t = "jam" -> False

💡 Решение:

1. Проверяем, равна ли длина строк. Если нет — сразу False

2. Считаем, сколько раз каждая буква встречается в s. (заносим это в словарь)

3. Уменьшаем счётчик для каждой буквы из t. (обращаемся к словарю)

4. Если где-то счётчик уходит в минус или буквы нет — это не анаграмма.

5. Если всё прошло — строки анаграммы. Выводим True

💡Подробное видео решение и более простой способ снизу 👇
https://neetcode.io/solutions/valid-anagram

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

Пример:

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

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

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

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

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

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

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

t.me/IT_Python_ZheglY | #LeetCode
🔥 Разбор задачи 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
🔥Разбор задачи 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
🔥Задача с 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
🔥Задача с 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
🔥Задача с Leetcode #392: Is Subsequence

Условие:
Даны две строки s и t. Проверить, является ли s подпоследовательностью t.

Что такое подпоследовательность?

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

Примеры:

s = "abc", t = "ahbgdc" → true

s = "axc", t = "ahbgdc" → false

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

🔵Идем по строке t и ищем символы из s по порядку

🔵Когда находим совпадение - двигаем указатель s на следующий символ.

🔵Если прошли всю s - возвращаем true

Сложность:

Время: O(n) - проходим по строке t один раз

💾 Память: O(1) - используем только константную память

🖥 Видео разбор задачи NeetCode

🧑‍💻@IT_Python_ZheglY | #leetcode #python
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3