Python | LeetCode
Відкрити в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Показати більше8 924
Підписники
-1024 години
-427 днів
-12730 днів
Архів дописів
8 922
Системный администратор Linux с нуля
Бесплатный курс от Selectel
Старт — 1 марта
Освойте администрирование Linux на SelectOS.
После курса вы сможете:
- управлять инфраструктурой на базе Linux;
- работать с командной строкой и основными утилитами;
- управлять пользователями, файлами и правами доступа;
- настраивать сети, SSH-соединения и мониторинг системы;
- управлять пакетами и обновлениями программного обеспечения;
- анализировать логи и устранять инциденты.
Смотреть
#реклама 16+
promo.selectel.ru
О рекламодателе
8 922
#easy
Задача: 342. Power of Four
Дано целое число n. Верните true, если оно является степенью числа четыре. В противном случае верните false.
Целое число n является степенью числа четыре, если существует целое число x такое, что n == 4^x.
Пример:
Input: n = 16 Output: true👨💻 Алгоритм: 1️⃣Проверка неотрицательности: Убедитесь, что n больше нуля, так как степени числа четыре всегда положительны. 2️⃣Проверка логарифмом: Используйте логарифм для проверки, является ли число степенью четырех. Число n является степенью четырех, если логарифм n по основанию 4 является целым числом. 3️⃣Проверка побитовым оператором: Число является степенью четырех, если оно является степенью двух (только один бит установлен) и количество нулей после этого бита четно. 😎 Решение:
class Solution:
def isPowerOfFour(self, n: int) -> bool:
if n <= 0:
return False
import math
log_n_base_4 = math.log(n, 4)
return log_n_base_4.is_integer()
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых8 922
#easy
Задача: 744. Find Smallest Letter Greater Than Target
Нам дан массив символов letters, отсортированный в неубывающем порядке, и символ target. В массиве letters есть как минимум два разных символа. Возвращается наименьший символ в letters, который лексикографически больше target. Если такого символа не существует, возвращается первый символ в буквах.
Пример:
Input: letters = ["c","f","j"], target = "a" Output: "c"👨💻 Алгоритм: 1⃣Использовать бинарный поиск для нахождения позиции первого символа в letters, который лексикографически больше target. 2⃣Если найденный символ существует, вернуть его. 3⃣Если такого символа не существует, вернуть первый символ в letters. 😎 Решение:
def nextGreatestLetter(letters, target):
left, right = 0, len(letters) - 1
while left <= right:
mid = (left + right) // 2
if letters[mid] > target:
right = mid - 1
else:
left = mid + 1
return letters[left % len(letters)]
Ставь 👍 и забирай 📚 Базу знаний8 922
Курс Аналитика данных с нуля. Теперь со скидкой 50%!
Освойте Python для анализа данных. BI-визуализация, SQL и работа с Airflow, Git
Узнать больше
#реклама 16+
karpov.courses
О рекламодателе
8 922
#medium
Задача: 743. Network Delay Time
Дана сеть из узлов, помеченных от 1 до n. Также дано times - список времен прохождения сигнала в виде направленных ребер times[i] = (ui, vi, wi), где ui - исходный узел, vi - целевой узел, а wi - время прохождения сигнала от источника до цели. Мы пошлем сигнал из заданного узла k. Верните минимальное время, которое потребуется всем узлам, чтобы получить сигнал. Если все узлы не могут получить сигнал, верните -1.
Пример:
Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2 Output: 2👨💻 Алгоритм: 1⃣Представьте граф в виде списка смежности. 2⃣Используйте алгоритм Дейкстры для нахождения кратчайших путей от узла k до всех других узлов. 3⃣Найдите максимальное значение среди кратчайших путей к узлам. Если какой-либо узел недостижим, верните -1. 😎 Решение:
import heapq
def networkDelayTime(times, n, k):
graph = {i: [] for i in range(1, n + 1)}
for u, v, w in times:
graph[u].append((v, w))
min_heap = [(0, k)]
min_time = {i: float('inf') for i in range(1, n + 1)}
min_time[k] = 0
while min_heap:
time, node = heapq.heappop(min_heap)
for neighbor, t in graph[node]:
new_time = time + t
if new_time < min_time[neighbor]:
min_time[neighbor] = new_time
heapq.heappush(min_heap, (new_time, neighbor))
max_time = max(min_time.values())
return max_time if max_time < float('inf') else -1
Ставь 👍 и забирай 📚 Базу знаний8 922
UserGate Open Conf 17 / 04 / 2025
⚡ ИТ-конференция про защиту в открытую.
Здесь мы создаем площадку для открытого диалога между заказчиками, партнерами, экспертами и специалистами в сфере продуктов, технологий и услуг информационной безопасности.
Что мы готовим для вас:
- аналитические данные исследования рынка информационной безопасности;
- обзор новых видов и эволюции киберугроз с разбором кейсов по борьбе с ними;
- планы внедрения новых фич и обновлений продуктов экосистемы UserGate;
- 30+ продуктовых, партнерских и клиентских докладов;
- нетворкинг, продуктовые демо, обмен опытом и консультации экспертов ИБ;
- ответы на любые вопросы и сбор обратной связи о работе продуктов и устройств UserGate.
Зарегистрироваться
#реклама
openconf.usergate.com
О рекламодателе
8 922
#medium
Задача: 742. Closest Leaf in a Binary Tree
Если задан корень бинарного дерева, в котором каждый узел имеет уникальное значение, а также задано целое число k, верните значение ближайшего к цели k узла листа дерева. Ближайший к листу узел означает наименьшее количество ребер, пройденных бинарным деревом, чтобы достичь любого листа дерева. Кроме того, узел называется листом, если у него нет дочерних узлов.
Пример:
Input: root = [1,3,2], k = 1 Output: 2👨💻 Алгоритм: 1⃣Пройдите дерево, чтобы найти путь от корня до узла k и сохранить его в список. 2⃣Найдите все листья и минимальное расстояние до них, используя BFS, начиная с найденного узла k. 3⃣Верните значение ближайшего листа. 😎 Решение:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def findClosestLeaf(root, k):
from collections import deque, defaultdict
def find_path(node, k, path):
if not node:
return False
path.append(node)
if node.val == k:
return True
if (node.left and find_path(node.left, k, path)) or (node.right and find_path(node.right, k, path)):
return True
path.pop()
return False
def find_leaves(node, leaves):
if not node:
return
if not node.left and not node.right:
leaves[node] = 0
find_leaves(node.left, leaves)
find_leaves(node.right, leaves)
path = []
find_path(root, k, path)
leaves = {}
find_leaves(root, leaves)
queue = deque([(path[-1], 0)])
visited = set()
while queue:
node, dist = queue.popleft()
if node in leaves:
return node.val
visited.add(node)
if node.left and node.left not in visited:
queue.append((node.left, dist + 1))
if node.right and node.right not in visited:
queue.append((node.right, dist + 1))
if len(path) > 1 and path[-2] not in visited:
queue.append((path.pop(), dist + 1))
return -1
Ставь 👍 и забирай 📚 Базу знаний8 922
🔥Podlodka Python Crew — это онлайн-конференции по самым актуальным темам для питонистов.
Разбираем сложные вещи простыми словами, без воды, с уклоном на практику. Сессии проходят в удобное время — утром и вечером.
С 17 по 21 марта пройдет сезон, посвященный оптимизации работы Python-приложений. Разбираем профилирование, внутренности CPython и техники ускорения кода.
🎯Что в программе?
• Оптимизации, которые вы могли упустить — Александр Кучин (Литрес) расскажет, какие скрытые проблемы могут замедлять код и как их исправить 🚀
• Как работает CPython — от запуска скрипта до управления памятью — Василий Рябов разберет, как Python читает и выполняет код, управляет памятью и garbage collection 📌
• Своя Игра: уровни глубины знаний Python-разработчика — Нина Лукина и Евгений Афонасьев в формате викторины объяснят, как Python работает под капотом. Это будет эпично 🎮
• Профилирование на Python — Василий Исаев (Точка) объяснит, как находить узкие места в коде и повышать его производительность с помощью профилирования 💡
Подходы, которые можно внедрить сразу после конференции!
🔗 Подробности и билеты: https://podlodka.io/pythoncrew
8 922
Ответьте на 1 вопрос и Яндекс Музыка 14 дней бесплатно
Яндекс Музыка, Книги и Кинопоиск для вас и 3-х ваших близких 14 дней бесплатно. Попробуйте!👍
Попробовать
#реклама 18+
mrqz.me
О рекламодателе
Реклама на Яндексе
8 922
#hard
Задача: 741. Cherry Pickup
Вам дана сетка n x n, представляющая поле вишен. Каждая клетка - одно из трех возможных целых чисел. 0 означает, что клетка пуста, и вы можете пройти через нее, 1 означает, что клетка содержит вишню, которую вы можете сорвать и пройти через нее, или -1 означает, что клетка содержит шип, который преграждает вам путь. Верните максимальное количество вишен, которое вы можете собрать, следуя следующим правилам: Начиная с позиции (0, 0) и достигая (n - 1, n - 1) путем перемещения вправо или вниз через допустимые клетки пути (клетки со значением 0 или 1).
После достижения (n - 1, n - 1) вернитесь в (0, 0), двигаясь влево или вверх по клеткам с действительными путями. Проходя через клетку пути, содержащую вишню, вы поднимаете ее, и клетка становится пустой клеткой 0. Если между (0, 0) и (n - 1, n - 1) нет действительного пути, то вишни собрать нельзя.
Пример:
Input: grid = [[0,1,-1],[1,0,-1],[1,1,1]] Output: 5👨💻 Алгоритм: 1⃣Используйте динамическое программирование для подсчета максимального количества вишен, которые можно собрать при движении от (0, 0) до (n - 1, n - 1). 2⃣Примените еще один проход с использованием динамического программирования для движения обратно от (n - 1, n - 1) до (0, 0), чтобы учитывать вишни, собранные на обратном пути. 3⃣Объедините результаты двух проходов, чтобы найти максимальное количество вишен, которые можно собрать. 😎 Решение:
def cherryPickup(grid):
n = len(grid)
dp = [[[-float('inf')] * n for _ in range(n)] for _ in range(n)]
dp[0][0][0] = grid[0][0]
for k in range(1, 2 * (n - 1) + 1):
for i1 in range(max(0, k - n + 1), min(n, k + 1)):
for i2 in range(max(0, k - n + 1), min(n, k + 1)):
j1, j2 = k - i1, k - i2
if 0 <= j1 < n and 0 <= j2 < n and grid[i1][j1] != -1 and grid[i2][j2] != -1:
max_cherries = max(
dp[i1 - 1][i2 - 1][k - 1] if i1 > 0 and i2 > 0 else -float('inf'),
dp[i1 - 1][i2][k - 1] if i1 > 0 else -float('inf'),
dp[i1][i2 - 1][k - 1] if i2 > 0 else -float('inf'),
dp[i1][i2][k - 1]
)
if max_cherries != -float('inf'):
dp[i1][i2][k] = max_cherries + grid[i1][j1]
if i1 != i2:
dp[i1][i2][k] += grid[i2][j2]
return max(0, dp[n - 1][n - 1][2 * (n - 1)])
Ставь 👍 и забирай 📚 Базу знаний8 922
Создание телеграм-бота. Бесплатный МК для подростков
Научим подростков 13-18 лет с нуля создавать телеграм-ботов!
⚡За 1.5 часа ребёнок научится с нуля создавать чат-бота, который умеет выдавать сведения о погоде в указанном городе и сопровождать данные изображением!
Педагоги Университета Иннополис в простой форме дадут практические навыки работы на языке Python, которые ребёнок сможет самостоятельно использовать для реализации своих идей в дальнейшем.
✨Не упустите шанс бесплатно дать ребёнку уникальные практические навыки от самых лучших педагогов ведущего ИТ-ВУЗа страны - Универститета Иннополис!
Регистрируйтесь на бесплатный мастер-класс.
Количество мест ограничено.
Узнать больше
#реклама 16+
progmatica.innopolis.university
О рекламодателе
8 922
#medium
Задача: 740. Delete and Earn
Вам дан целочисленный массив nums. Вы хотите максимизировать количество очков, выполнив следующую операцию любое количество раз: Выберите любой элемент nums[i] и удалите его, чтобы заработать nums[i] очков. После этого вы должны удалить каждый элемент, равный nums[i] - 1, и каждый элемент, равный nums[i] + 1. Верните максимальное количество очков, которое вы можете заработать, применив вышеуказанную операцию некоторое количество раз.
Пример:
Input: nums = [3,4,2] Output: 6👨💻 Алгоритм: 1⃣Подсчитайте количество каждого числа в массиве nums. 2⃣Используйте динамическое программирование для расчета максимальных очков, которые можно заработать, используя накопленный результат для чисел, меньших текущего. Добавьте текущий день в стек. 3⃣Для каждого числа num в nums, учитывайте два случая: не брать число или взять число и добавить его очки. 😎 Решение:
def deleteAndEarn(nums):
from collections import Counter
count = Counter(nums)
prev = None
avoid = using = 0
for num in sorted(count):
if num - 1 != prev:
new_avoid, new_using = max(avoid, using), num * count[num] + max(avoid, using)
else:
new_avoid, new_using = max(avoid, using), num * count[num] + avoid
avoid, using = new_avoid, new_using
prev = num
return max(avoid, using)
Ставь 👍 и забирай 📚 Базу знаний8 922
Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1
Открытые школы — это возможность за месяц прокачать свои навыки и получить оффер в ИТ-холдинг Т1.
С тебя — год опыта работы в ИТ, с нас — бесплатный онлайн-интенсив и топовые преподаватели.
Что ты получишь?
✅ Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др.
✅ Быстрый рост в ИТ при экспертной поддержке.
✅ Материалы от HR, которые помогут прокачать резюме и подготовиться к интервью в Т1.
✅ Поддержка опытных преподавателей и уникальный карьерный фаст-трек до мидла в Т1 для выпускников интенсива.
✅ Реальный шанс получить оффер в Т1.
Подавай заявку до 14 марта и приходи учиться! Старт ИТ-интенсива уже 17 марта.
Подать заявку
#реклама 16+
t1.ru
О рекламодателе
8 922
#medium
Задача: 739. Daily Temperatures
Задав массив целых чисел temperature, представляющих дневные температуры, верните массив answer, такой, что answer[i] - это количество дней, которые нужно подождать после i-го дня, чтобы температура стала теплее. Если в будущем не существует дня, для которого это возможно, сохраните answer[i] == 0.
Пример:
Input: temperatures = [73,74,75,71,69,72,76,73] Output: [1,1,4,2,1,1,0,0]👨💻 Алгоритм: 1⃣Создайте стек для хранения индексов дней с температурами, для которых еще не найден более теплый день. 2⃣Пройдите по массиву температур и для каждого дня: Пока текущая температура больше температуры дня на вершине стека, обновляйте массив ответов и удаляйте вершину стека. Добавьте текущий день в стек. 3⃣Возвращайте массив ответов. 😎 Решение:
def dailyTemperatures(T):
n = len(T)
answer = [0] * n
stack = []
for i in range(n):
while stack and T[i] > T[stack[-1]]:
j = stack.pop()
answer[j] = i - j
stack.append(i)
return answer
Ставь 👍 и забирай 📚 Базу знаний8 922
#medium
Задача: 738. Monotone Increasing Digits
Целое число имеет монотонно возрастающие цифры тогда и только тогда, когда каждая пара соседних цифр x и y удовлетворяет x <= y. Задав целое число n, верните наибольшее число, которое меньше или равно n с монотонно возрастающими цифрами.
Пример:
Input: n = 10 Output: 9👨💻 Алгоритм: 1⃣Преобразуйте число в строку для удобства обработки. 2⃣Найдите позицию, где последовательность перестает быть монотонной. 3⃣Уменьшите соответствующую цифру и установите все последующие цифры в 9. 😎 Решение:
def monotoneIncreasingDigits(n):
digits = list(str(n))
mark = len(digits)
for i in range(len(digits) - 1, 0, -1):
if digits[i] < digits[i - 1]:
mark = i
digits[i - 1] = str(int(digits[i - 1]) - 1)
for i in range(mark, len(digits)):
digits[i] = '9'
return int("".join(digits))
Ставь 👍 и забирай 📚 Базу знаний8 922
Узнайте, какая профессия в IT вам подходит. Бесплатно!
Пройдите тест на профессию и забирайте:
✅ Бесплатную карьерную консультацию с экспертом
✅ Доступ к чат-боту с гайдами по профессиям и заданиями для самопроверки
✅ Мини-курсы для погружения в IT и дизайн, чтобы точнее выбрать направление
✨130 000 человек уже прошли профтестирование и выбрали перспективную профессию в IT или дизайне
Пройдите тест за 5 минут!
Начать
#реклама 16+
free.skillfactory.ru
О рекламодателе
8 922
#medium
Задача: 737. Sentence Similarity II
Мы можем представить предложение в виде массива слов, например, предложение "I am happy with leetcode" можно представить как arr = ["I", "am",happy", "with", "leetcode"].
Даны два предложения sentence1 и sentence2, каждое из которых представлено в виде массива строк, и массив пар строк similarPairs, где similarPairs[i] = [xi, yi] указывает, что два слова xi и yi похожи. Возвращается true, если предложения sentence1 и sentence2 похожи, или false, если они не похожи. Два предложения похожи, если: у них одинаковая длина (т.е, Заметьте, что слово всегда похоже само на себя, также обратите внимание, что отношение сходства является транзитивным. Например, если слова a и b похожи, а слова b и c похожи, то a и c похожи.
Пример:
Input: sentence1 = ["great","acting","skills"], sentence2 = ["fine","drama","talent"], similarPairs = [["great","good"],["fine","good"],["drama","acting"],["skills","talent"]] Output: true👨💻 Алгоритм: 1⃣Проверить, одинаковой ли длины предложения sentence1 и sentence2. Если нет, вернуть false. 2⃣Построить граф схожести слов с использованием словаря. 3⃣Использовать поиск в глубину (DFS) для проверки транзитивной схожести слов в предложениях. 😎 Решение:
def areSentencesSimilar(sentence1, sentence2, similarPairs):
if len(sentence1) != len(sentence2):
return False
graph = {}
for x, y in similarPairs:
if x not in graph:
graph[x] = []
if y not in graph:
graph[y] = []
graph[x].append(y)
graph[y].append(x)
def dfs(word1, word2, visited):
if word1 == word2:
return True
visited.add(word1)
for neighbor in graph.get(word1, []):
if neighbor not in visited and dfs(neighbor, word2, visited):
return True
return False
for w1, w2 in zip(sentence1, sentence2):
if w1 != w2 and not dfs(w1, w2, set()):
return False
return True
Ставь 👍 и забирай 📚 Базу знаний8 922
Бесплатный курс по дизайну в FIGMA
Онлайн-программа с наставником и чатом.
Осторожно! 80% практики.
По результату обучения у вас будет портфолио из нескольких работ.
Сертификат о прохождении курса.
Возможность пройти полное обучение и получить гарантированное трудоустройство!
Учитесь дизайну у профессионалов.
Переходи по кнопки: "Узнать больше" и начинай свое обучение.
Доступ 0 руб.
Узнать больше
#реклама 16+
yudaevschool24.online
О рекламодателе
8 922
#hard
Задача: 736. Parse Lisp Expression
Нам дан массив asteroids, состоящий из целых чисел, представляющих астероиды в ряд. Для каждого астероида абсолютное значение обозначает его размер, а знак - направление движения (положительное - вправо, отрицательное - влево). Каждый астероид движется с одинаковой скоростью. Определите состояние астероидов после всех столкновений. Если два астероида столкнутся, меньший из них взорвется. Если оба одинакового размера, то взорвутся оба. Два астероида, движущиеся в одном направлении, никогда не встретятся.
Пример:
Input: expression = "(let x 2 (mult x (let x 3 y 4 (add x y))))" Output: 14👨💻 Алгоритм: 1⃣Определите функцию для оценки выражений. 2⃣Используйте рекурсивный подход для обработки различных типов выражений (let, add, mult, и переменных). 3⃣Используйте словарь для отслеживания значений переменных с учетом области видимости. 😎 Решение:
class Solution:
def evaluate(self, expression: str) -> int:
def evaluate(expression, env):
if expression[0] != '(':
if expression[0].isalpha():
return env[expression]
return int(expression)
tokens = tokenize(expression)
if tokens[0] == 'let':
for i in range(1, len(tokens) - 2, 2):
env[tokens[i]] = evaluate(tokens[i + 1], env)
return evaluate(tokens[-1], env)
elif tokens[0] == 'add':
return evaluate(tokens[1], env) + evaluate(tokens[2], env)
elif tokens[0] == 'mult':
return evaluate(tokens[1], env) * evaluate(tokens[2], env)
def tokenize(expression):
tokens, token, parens = [], '', 0
for char in expression:
if char == '(':
parens += 1
if parens == 1:
continue
elif char == ')':
parens -= 1
if parens == 0:
tokens.append(tokenize(token))
token = ''
continue
elif char == ' ' and parens == 1:
if token:
tokens.append(token)
token = ''
continue
token += char
if token:
tokens.append(token)
return tokens
return evaluate(expression, {})
Ставь 👍 и забирай 📚 Базу знаний8 922
Крупнейший университет искусственного интеллекта
Учим использовать ChatGPT в профессиональных целях, создавать нейро-сотрудников и зарабатывать на искусственном интеллекте.
✨ 8 000+ студентов со всего мира
✨ 600+ AI-проектов, созданных студентами
✨ Сборная Университета — победители крупнейших AI-хакатонов России
✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие)
✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие)
Будем рады видеть тебя в наших рядах!
Узнать больше
#реклама 16+
neural-university.ru
О рекламодателе
