🔥Задача с LeetCode #344: Reverse String
Необходимо развернуть список символов in-place, т.е. без создания нового списка.
Input: ["n","e","e","t"]
Output: ["t","e","e","n"]
💡Идея решения:
• Создаём два указателя — left в начале, right в конце.
• Пока они не встретятся, меняем местами s[left] и s[right].
• После каждой замены сдвигаем указатели навстречу друг другу.
💡Альтернативное решение:
🖥 Подробное видео решение можно посмотреть здесь👇
https://neetcode.io/solutions/reverse-string
@IT_Python_ZheglY | #leetcode #python
Необходимо развернуть список символов 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
Оценка алгоритма — это способ понять, насколько эффективно работает код: по времени выполнения и объёму используемой памяти.
⏱️ Временная сложность (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
Хабр
Сложность алгоритмов. Разбор Big O
Сложность алгоритмов - это ключевой аспект при проектировании и создании веб-приложений, особенно при работе с большим объемом данных или выполнении вычислительно сложных операций. Понимание, как...
👏9🔥8
🔥 ТОП сортировок: что важно знать разработчику и на собеседовании?
В мире алгоритмов сортировки есть много разных вариантов, но какие действительно часто встречаются в продакшене и на собеседованиях?
😀 Почему это важно?
На собеседованиях часто спрашивают именно Quick Sort, Merge Sort и Tim Sort — это базовые алгоритмы, которые нужно знать хорошо. Остальные — полезны для расширения кругозора и понимания узких случаев.
✅ — используется в продакшене
🔥 — часто спрашивают на собеседованиях
📚 — часто используется для обучения и объяснения основ
📌 В следующих постах разберем способы сортировки на примере кода
[IT-PythonHub-LeetCode](t.me/IT_Python_ZheglY) | #Сортировки
В мире алгоритмов сортировки есть много разных вариантов, но какие действительно часто встречаются в продакшене и на собеседованиях?
На собеседованиях часто спрашивают именно 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) — работает на месте
@IT_Python_ZheglY | #Сортировки #Python
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) — работает на месте
@IT_Python_ZheglY | #Сортировки@IT_Python_ZheglY
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🔥4❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Radix Sort — это нестандартный, но очень мощный алгоритм сортировки. В отличие от большинства алгоритмов, он не использует сравнение элементов. Вместо этого сортирует числа поразрядно: от младшего разряда к старшему (или наоборот).
@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
💡Что должно содержать в себе название переменной? Какая длинна имени оптимальна? Как придумать подходящее имя?
Все о содержательных именах в данном подкасте!
📌 Таймлайны:
▫️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
👍17❤11🔥11🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
Яндекс проведет Dream → Teamlead конференцию которая поможет тебе прокачать управленческие навыки.
Москва, офис Яндекса,
ул. Льва Толстого, д.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
🚫Минусы:
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
Ответы — в новом выпуске! Вот главные моменты:
▫️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 | #сортировки
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
Все о карьере в IT в этом подкасте!
🎧 Ссылка на выпуск:
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
Палиндром - это строка, которая читается одинаково как слева направо, так и справа налево.
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🔥9❤8🍓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 — чтобы не потерять следующий узел после изменения ссылки.
🔵 Разворачиваем ссылку —
🔵 Сдвигаем указатели — двигаем prev и curr вперёд.
🖥 Подробное решение можно посмотреть здесь
🧑💻 @IT_Python_ZheglY | #leetcode #python
Исходный список: 1 -> 2 -> 3 -> 4 -> 5
Развёрнутый: 5 -> 4 -> 3 -> 2 -> 1
curr.next
теперь указывает на prev.Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7👏5🔥1🤮1🍓1
Все о "подводных камнях" в ООП рассказывают опытные разработчики в этом подкасте
#Python #подкасты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👏8👍3🤮1🍓1🍾1
HTTP-коды ответов (Status Codes) — это трехзначные числа, которые сервер отправляет клиенту для информирования о результате обработки запроса.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤8👏8🔥2💩2🍾1
HTTP-коды состояния 400 (Client Error) и 500 (Server Error) — это две основные категории ошибок, которые указывают на проблемы при обработке запроса. Вот их ключевые различия и особенности:
● 400 Bad Request Сервер не понял запрос из-за синтаксической ошибки
● 401 Unauthorized Требуется аутентификация
● 403 Forbidden Доступ запрещён
● 404 Not Found Сервер не нашёл запрашиваемый ресурс
● 405 Method Not Allowed Используется неподдерживаемый HTTP-метод
● 500 Internal Server Error — Общая ошибка сервера
● 502 Bad Gateway — Проблема с прокси-сервером или API
● 503 Service Unavailable — Сервер временно недоступен.
1. Полный список кодов с пояснениями от Mozilla
2. QaRocks
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🍓5👏4🦄4💩2❤1🍾1