ch
Feedback
Python | LeetCode

Python | LeetCode

前往频道在 Telegram
9 402
订阅者
-424 小时
-117
-5430
帖子存档
Крупнейший университет искусственного интеллекта Временные ряды — это данные, упорядоченные во времени, например, трафик на д
Крупнейший университет искусственного интеллекта Временные ряды — это данные, упорядоченные во времени, например, трафик на дорогах, изменения температуры или спрос на товары. С помощью AI можно предсказывать тренды, выявлять аномалии и оптимизировать процессы. Получите полный доступ к курсу по временным рядам на сайте. Это абсолютно бесплатно. ✨ 8 000+ студентов со всего мира ✨ 600+ AI-проектов, созданных студентами ✨ Сборная Университета — победители крупнейших AI-хакатонов России ✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие) ✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие) Будем рады видеть тебя среди наших студентов! Узнать больше #реклама 16+ neural-university.ru О рекламодателе

#easy Задача: 747. Largest Number At Least Twice of Others Вам дан целочисленный массив nums, в котором наибольшее целое число уникально. Определите, является ли наибольший элемент массива по крайней мере в два раза больше всех остальных чисел в массиве. Если да, то верните индекс самого большого элемента, в противном случае верните -1. Пример:
Input: nums = [3,6,1,0]
Output: 1
👨‍💻 Алгоритм: 1⃣Найдите максимальный элемент в массиве и его индекс. 2⃣Проверьте, является ли этот максимальный элемент по крайней мере в два раза больше всех остальных элементов массива. 3⃣Если условие выполняется, верните индекс максимального элемента, иначе верните -1. 😎 Решение:
def dominantIndex(nums):
    max_val = max(nums)
    max_index = nums.index(max_val)
    for num in nums:
        if num != max_val and max_val < 2 * num:
            return -1
    return max_index
Ставь 👍 и забирай 📚 Базу знаний

#easy Задача: 746. Min Cost Climbing Stairs Вам дан целочисленный массив cost, где cost[i] - стоимость i-й ступеньки на лестнице. После оплаты стоимости вы можете подняться на одну или две ступеньки. Вы можете начать со ступеньки с индексом 0 или со ступеньки с индексом 1. Верните минимальную стоимость достижения вершины этажа. Пример:
Input: cost = [10,15,20]
Output: 15
👨‍💻 Алгоритм: 1⃣Создать массив dp, где dp[i] хранит минимальную стоимость достижения i-й ступеньки. 2⃣Инициализировать dp[0] и dp[1] как cost[0] и cost[1] соответственно. Заполнить dp используя минимальную стоимость подъема с предыдущих ступенек. 3⃣Вернуть минимальную стоимость достижения вершины. 😎 Решение:
def minCostClimbingStairs(cost):
    n = len(cost)
    dp = [0] * n
    dp[0] = cost[0]
    dp[1] = cost[1]
    for i in range(2, n):
        dp[i] = cost[i] + min(dp[i - 1], dp[i - 2])
    return min(dp[-1], dp[-2])
Ставь 👍 и забирай 📚 Базу знаний

Крупнейший университет искусственного интеллекта Приглашаем на бесплатный однодневный интенсив по AI! Освой искусственный инт
Крупнейший университет искусственного интеллекта Приглашаем на бесплатный однодневный интенсив по AI! Освой искусственный интеллект для профессионального роста: создавай нейросети, автоматизируй бизнес-задачи и зарабатывай на AI-решениях. ✨ 8 000+ студентов со всего мира ✨ 600+ AI-проектов, созданных студентами ✨ Сборная Университета — победители крупнейших AI-хакатонов России ✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие) ✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие) Будем рады видеть тебя в наших рядах! Узнать больше #реклама 16+ neural-university.ru О рекламодателе

#hard Задача: 745. Prefix and Suffix Search Создайте специальный словарь, в котором поиск слов осуществляется по префиксу и суффиксу. Реализуйте класс WordFilter: WordFilter(string[] words) Инициализирует объект со словами в словаре. f(string pref, string suff) Возвращает индекс слова в словаре, которое имеет префикс pref и суффикс suff. Если существует более одного допустимого индекса, возвращается наибольший из них. Если в словаре нет такого слова, возвращается -1. Пример:
Input: letters = ["c","f","j"], target = "a"
Output: "c"
👨‍💻 Алгоритм: 1⃣Сохраните слова и их индексы в словаре. 2⃣Создайте объединенные ключи, состоящие из префиксов и суффиксов для всех возможных комбинаций. 3⃣Реализуйте функцию поиска, которая ищет наибольший индекс слова по префиксу и суффиксу. 😎 Решение:
class WordFilter:
    def __init__(self, words):
        self.prefix_suffix_map = {}
        for index, word in enumerate(words):
            length = len(word)
            for prefix_length in range(1, length + 1):
                for suffix_length in range(1, length + 1):
                    key = word[:prefix_length] + '#' + word[-suffix_length:]
                    self.prefix_suffix_map[key] = index
    
    def f(self, pref, suff):
        key = pref + '#' + suff
        return self.prefix_suffix_map.get(key, -1)
Ставь 👍 и забирай 📚 Базу знаний

Системный администратор Linux с нуля Бесплатный курс от Selectel Старт — 1 марта Освойте администрирование Linux на SelectOS.
Системный администратор Linux с нуля Бесплатный курс от Selectel Старт — 1 марта Освойте администрирование Linux на SelectOS. После курса вы сможете: - управлять инфраструктурой на базе Linux; - работать с командной строкой и основными утилитами; - управлять пользователями, файлами и правами доступа; - настраивать сети, SSH-соединения и мониторинг системы; - управлять пакетами и обновлениями программного обеспечения; - анализировать логи и устранять инциденты. Смотреть #реклама 16+ promo.selectel.ru О рекламодателе

#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()
🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

#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)]
Ставь 👍 и забирай 📚 Базу знаний

Курс Аналитика данных с нуля. Теперь со скидкой 50%! Освойте Python для анализа данных. BI-визуализация, SQL и работа с Airfl
Курс Аналитика данных с нуля. Теперь со скидкой 50%! Освойте Python для анализа данных. BI-визуализация, SQL и работа с Airflow, Git Узнать больше #реклама 16+ karpov.courses О рекламодателе

#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
Ставь 👍 и забирай 📚 Базу знаний

UserGate Open Conf 17 / 04 / 2025ИТ-конференция про защиту в открытую. Здесь мы создаем площадку для открытого диалога между заказчиками, партнерами, экспертами и специалистами в сфере продуктов, технологий и услуг информационной безопасности. Что мы готовим для вас: - аналитические данные исследования рынка информационной безопасности; - обзор новых видов и эволюции киберугроз с разбором кейсов по борьбе с ними; - планы внедрения новых фич и обновлений продуктов экосистемы UserGate; - 30+ продуктовых, партнерских и клиентских докладов; - нетворкинг, продуктовые демо, обмен опытом и консультации экспертов ИБ; - ответы на любые вопросы и сбор обратной связи о работе продуктов и устройств UserGate. Зарегистрироваться #реклама openconf.usergate.com О рекламодателе

#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
Ставь 👍 и забирай 📚 Базу знаний

🔥Podlodka Python Crew — это онлайн-конференции по самым актуальным темам для питонистов. Разбираем сложные вещи простыми сло
🔥Podlodka Python Crew — это онлайн-конференции по самым актуальным темам для питонистов. Разбираем сложные вещи простыми словами, без воды, с уклоном на практику. Сессии проходят в удобное время — утром и вечером. С 17 по 21 марта пройдет сезон, посвященный оптимизации работы Python-приложений. Разбираем профилирование, внутренности CPython и техники ускорения кода. 🎯Что в программе?Оптимизации, которые вы могли упустить — Александр Кучин (Литрес) расскажет, какие скрытые проблемы могут замедлять код и как их исправить 🚀 • Как работает CPython — от запуска скрипта до управления памятью — Василий Рябов разберет, как Python читает и выполняет код, управляет памятью и garbage collection 📌 • Своя Игра: уровни глубины знаний Python-разработчика — Нина Лукина и Евгений Афонасьев в формате викторины объяснят, как Python работает под капотом. Это будет эпично 🎮 • Профилирование на Python — Василий Исаев (Точка) объяснит, как находить узкие места в коде и повышать его производительность с помощью профилирования 💡 Подходы, которые можно внедрить сразу после конференции! 🔗 Подробности и билеты: https://podlodka.io/pythoncrew

Ответьте на 1 вопрос и Яндекс Музыка 14 дней бесплатно Яндекс Музыка, Книги и Кинопоиск для вас и 3-х ваших близких 14 дней бесплатно. Попробуйте!👍 Попробовать #реклама 18+ mrqz.me О рекламодателе Реклама на Яндексе

#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)])
Ставь 👍 и забирай 📚 Базу знаний

Создание телеграм-бота. Бесплатный МК для подростков Научим подростков 13-18 лет с нуля создавать телеграм-ботов! ⚡За 1.5 час
Создание телеграм-бота. Бесплатный МК для подростков Научим подростков 13-18 лет с нуля создавать телеграм-ботов! ⚡За 1.5 часа ребёнок научится с нуля создавать чат-бота, который умеет выдавать сведения о погоде в указанном городе и сопровождать данные изображением! Педагоги Университета Иннополис в простой форме дадут практические навыки работы на языке Python, которые ребёнок сможет самостоятельно использовать для реализации своих идей в дальнейшем. ✨Не упустите шанс бесплатно дать ребёнку уникальные практические навыки от самых лучших педагогов ведущего ИТ-ВУЗа страны - Универститета Иннополис! Регистрируйтесь на бесплатный мастер-класс. Количество мест ограничено. Узнать больше #реклама 16+ progmatica.innopolis.university О рекламодателе

#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)
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-интенсив для ИТ-специалистов в Открытых школах Т1 Открытые школы — это возможность за месяц прокачать свои навыки и получить оффер в ИТ-холдинг Т1. С тебя — год опыта работы в ИТ, с нас — бесплатный онлайн-интенсив и топовые преподаватели. Что ты получишь? ✅ Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др. ✅ Быстрый рост в ИТ при экспертной поддержке. ✅ Материалы от HR, которые помогут прокачать резюме и подготовиться к интервью в Т1. ✅ Поддержка опытных преподавателей и уникальный карьерный фаст-трек до мидла в Т1 для выпускников интенсива. ✅ Реальный шанс получить оффер в Т1. Подавай заявку до 14 марта и приходи учиться! Старт ИТ-интенсива уже 17 марта. Подать заявку #реклама 16+ t1.ru О рекламодателе

#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
Ставь 👍 и забирай 📚 Базу знаний

#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))
Ставь 👍 и забирай 📚 Базу знаний