uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Python | LeetCode

Python | LeetCode

Відкрити в Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

Показати більше
8 969
Підписники
Немає даних24 години
-297 днів
-10530 днів
Архів дописів
Задача: 1166. Design File System Сложность: medium Вам нужно разработать файловую систему, которая позволяет создавать новые пути и связывать их с различными значениями. Формат пути - это одна или несколько конкатенированных строк в форме: /, за которой следует одна или несколько строчных английских букв. Например, "/leetcode" и "/leetcode/problems" - допустимые пути, в то время как пустая строка "" и "/" не допустимы. Реализуйте класс FileSystem: - bool createPath(string path, int value) создает новый путь и связывает с ним значение, если это возможно, и возвращает true. Возвращает false, если путь уже существует или его родительский путь не существует. - int get(string path) возвращает значение, связанное с путем, или возвращает -1, если путь не существует. Пример:
Input: 
["FileSystem","createPath","get"]
[[],["/a",1],["/a"]]
Output: 
[null,true,1]
Explanation: 
FileSystem fileSystem = new FileSystem();

fileSystem.createPath("/a", 1); // return true
fileSystem.get("/a"); // return 1
👨‍💻 Алгоритм: 1⃣Инициализируйте словарь или HashMap под названием paths, который будет использовать ключ в виде пути, переданного в нашу функцию create, и значение, переданное этой функции. 2⃣Для функции create выполняем три шага. Сначала выполняем базовую проверку валидности пути. Проверяем, является ли путь пустым, "/" или если путь уже существует в нашем словаре. Если любое из этих условий выполнено, просто возвращаем false. Затем получаем родительский путь предоставленного пути и проверяем его наличие в словаре. Если родительский путь не существует, возвращаем false, иначе продолжаем. 3⃣Наконец, вставляем предоставленный путь и значение в словарь и возвращаем true. Для функции get просто возвращаем значение по умолчанию -1, если путь не существует в словаре. В противном случае возвращаем фактическое значение. 😎 Решение:
class FileSystem:

    def __init__(self):
        self.paths = {}

    def createPath(self, path: str, value: int) -> bool:
        if not path or (len(path) == 1 and path == "/") or path in self.paths:
            return False
        
        delim_index = path.rfind("/")
        parent = path[:delim_index]
        
        if len(parent) > 1 and parent not in self.paths:
            return False
        
        self.paths[path] = value
        return True

    def get(self, path: str) -> int:
        return self.paths.get(path, -1)
Ставь 👍 и забирай 📚 Базу знаний

АЙТИШНИКИ, ХВАТИТ сливать время на прилизанные новости и бесполезные курсы Проект «ИИнтеллигенция» стал главным каналом для т
АЙТИШНИКИ, ХВАТИТ сливать время на прилизанные новости и бесполезные курсы Проект «ИИнтеллигенция» стал главным каналом для тех, кто использует нейросети на уровне разработки, автоматизации и опенсорса, а не просто балуется в чатах. Здесь собирают только то, что реально экономит человеко-часы и работает в проде. 🎓 Готовые ИИ-сервисы, промпты и ИИ-агенты для автоматизации рутины 📚 Разборы полезных ИИ-инструментов, локальных LLM и опенсорс-репозиториев 🛠 Практические кейсы, гайды по деплою моделей и интеграции ИИ в пайплайны ⚡️ Технические ИТ-новости без маркетинговой воды и душных отчетов Обучение и прокачка в реальном времени: работа с API (Claude, GPT), локалки (Ollama, vLLM), автоматизация кода, опенсорс-утилиты, AI-агенты и др. Ценишь время и работаешь с ИИ, подпишись: @clucai

Обсудим опыт компаний по автоматизации производства Когда ручной труд на производстве перестаёт справляться? Приглашаем на бе
Обсудим опыт компаний по автоматизации производства Когда ручной труд на производстве перестаёт справляться? Приглашаем на бесплатную отраслевую дискуссию 14 июля в 11:00 (МСК). Обсудим автоматизацию конца производственной линии: барьеры, реальные кейсы и первые шаги. Ключевые преимущества: 💻 Онлайн-формат — участвуйте из любой точки. Платформа Pruffme. 💻 Независимые точки зрения — спикеры из отраслевых компаний 💻 Модератор от Яндекс Роботикс — держит фокус, задаёт острые вопросы, читает чат. 💻 Для тех, кто уже осознал задачу — автоматизация нужна, но решение ещё не принято. Зарегистрироваться Есть противопоказания. Посоветуйтесь с врачом. #реклама 16+ pruffme.com О рекламодателе

Получите 400 рублей на счет мобильного телефона Выберите Яндекс Поиск в настройках браузера, ищите в нём — и они ваши! Узнать больше #реклама 16+ portal.yandex.ru О рекламодателе

Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пр
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе

Задача: 938. Range Sum of BST Сложность: easy Учитывая корневой узел двоичного дерева поиска и два целых числа low и high, верните сумму значений всех узлов со значением в диапазоне [low, high]. Пример:
Input: root = [10,5,15,3,7,null,18], low = 7, high = 15
Output: 32
👨‍💻 Алгоритм: 1⃣Если дерево пустое, вернуть 0. 2⃣Если значение текущего узла меньше low, рекурсивно искать в правом поддереве. Если значение текущего узла больше high, рекурсивно искать в левом поддереве. 3⃣Если значение текущего узла в диапазоне [low, high], включить значение узла в сумму и рекурсивно искать в обоих поддеревьях. 😎 Решение:
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def rangeSumBST(root, low, high):
    if not root:
        return 0
    if root.val < low:
        return rangeSumBST(root.right, low, high)
    if root.val > high:
        return rangeSumBST(root.left, low, high)
    return root.val + rangeSumBST(root.left, low, high) + rangeSumBST(root.right, low, high)
Ставь 👍 и забирай 📚 Базу знаний

Получи грант до 3,48 млн на обучение дизайну Поступай на дизайн в Центральный университет с грантом. Для учеников 10–11-х кла
Получи грант до 3,48 млн на обучение дизайну Поступай на дизайн в Центральный университет с грантом. Для учеников 10–11-х классов и СПО. Освой графический, UI/UX и продуктовый дизайн. Создавай визуальные концепты будущего. На программе студенты получают фундаментальную базу, развивают прикладные навыки, приобретают опыт работы над реальными проектами, собирают портфолио и строят связи внутри дизайн-сообщества Подать заявку #реклама 16+ cu.ru О рекламодателе

Задача: 389. Find the Difference Сложность: easy Даны две строки s и t. Строка t генерируется путем случайного перемешивания строки s с добавлением еще одной буквы в случайную позицию. Верните букву, которая была добавлена в t. Пример:
Input: s = "abcd", t = "abcde"
Output: "e"
Explanation: 'e' is the letter that was added.
👨‍💻 Алгоритм: 1⃣Отсортируйте строки s и t. 2⃣Итерируйте по длине строк и сравнивайте их посимвольно. Это позволяет проверить, присутствует ли текущий символ строки t в строке s. 3⃣Как только встретится символ, который есть в строке t, но отсутствует в строке s, мы найдем лишний символ, который скрывала строка t все это время. 😎 Решение:
class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        sorted_s = sorted(s)
        sorted_t = sorted(t)

        for i in range(len(sorted_s)):
            if sorted_s[i] != sorted_t[i]:
                return sorted_t[i]

        return sorted_t[len(sorted_s)]
Ставь 👍 и забирай 📚 Базу знаний

Гайд МТС Линк для усиления лидогенерации Как выполнить KPI по лидам с помощью вебинаров? Изучили опыт 7.5 млн онлайн-мероприя
Гайд МТС Линк для усиления лидогенерации Как выполнить KPI по лидам с помощью вебинаров? Изучили опыт 7.5 млн онлайн-мероприятий, которые проходят на платформе ежегодно, и спешим поделиться бесплатным гайдом ✅ Что внутри: - Составили пошаговую инструкцию по организации маркетингового вебинара; - Собрали рекомендации экспертов по обучению, выступлениям и маркетингу; - Делимся успешными кейсами компаний DSSL, Just AI, «Гален», «САРШТЕДТ» и «ЭГИС-РУС» ✅ Кому полезно: - Маркетологам — для выполнения KPI по лидам; - Владельцам сложных продуктов — чтобы знакомить с продуктом поэтапно; - Экспертам и блогерам — для монетизации личного бренда; - B2B-командам — для сокращения цикла сделки через обучение клиентов. ✨ Скачайте бесплатно по ссылке Скачать #реклама 16+ mts-link.ru О рекламодателе

Задача: 288. Unique Word Abbreviation Сложность: medium Сокращение слова — это объединение его первой буквы, количества символов между первой и последней буквой и последней буквы. Если слово состоит только из двух символов, то оно является сокращением само по себе. Например: dog --> d1g, потому что между первой буквой 'd' и последней буквой 'g' одна буква. internationalization --> i18n, потому что между первой буквой 'i' и последней буквой 'n' 18 букв. it --> it, потому что любое слово из двух символов является своим собственным сокращением. Реализуйте класс ValidWordAbbr: ValidWordAbbr(String[] dictionary) Инициализирует объект со словарем слов. boolean isUnique(string word) Возвращает true, если выполняется одно из следующих условий (в противном случае возвращает false): В словаре нет слова, сокращение которого равно сокращению слова word. Для любого слова в словаре, сокращение которого равно сокращению слова word, это слово и word одинаковы. Пример:
Input
["ValidWordAbbr", "isUnique", "isUnique", "isUnique", "isUnique", "isUnique"]
[[["deer", "door", "cake", "card"]], ["dear"], ["cart"], ["cane"], ["make"], ["cake"]]
Output
[null, false, true, false, true, true]

Explanation
ValidWordAbbr validWordAbbr = new ValidWordAbbr(["deer", "door", "cake", "card"]);
validWordAbbr.isUnique("dear"); // return false, dictionary word "deer" and word "dear" have the same abbreviation "d2r" but are not the same.
validWordAbbr.isUnique("cart"); // return true, no words in the dictionary have the abbreviation "c2t".
validWordAbbr.isUnique("cane"); // return false, dictionary word "cake" and word "cane" have the same abbreviation  "c2e" but are not the same.
validWordAbbr.isUnique("make"); // return true, no words in the dictionary have the abbreviation "m2e".
validWordAbbr.isUnique("cake"); // return true, because "cake" is already in the dictionary and no other word in the dictionary has "c2e" abbreviation.
👨‍💻 Алгоритм: 1⃣Инициализация: Создайте словарь сокращений abbrDict, который будет хранить сокращения слов в виде ключей и булевы значения, указывающие, уникально ли сокращение. Создайте множество dict, содержащее все слова из словаря, чтобы быстро проверять наличие слова в словаре. 2⃣Генерация сокращений: При инициализации объекта ValidWordAbbr пройдите через каждое слово в словаре и создайте его сокращение. Если сокращение уже существует в abbrDict, установите значение в false (не уникальное). В противном случае установите значение в true (уникальное). 3⃣Проверка уникальности: Для метода isUnique создайте сокращение для входного слова и проверьте, есть ли это сокращение в abbrDict. Если сокращение отсутствует в abbrDict, возвращайте true. Если сокращение присутствует и оно уникально, проверьте, есть ли это слово в словаре. Если да, возвращайте true, в противном случае - false. 😎 Решение:
class ValidWordAbbr:
    def __init__(self, dictionary: List[str]):
        self.abbr_dict = {}
        self.dict = set(dictionary)
        for word in self.dict:
            abbr = self.to_abbr(word)
            self.abbr_dict[abbr] = not self.abbr_dict.get(abbr, False)

    def isUnique(self, word: str) -> bool:
        abbr = self.to_abbr(word)
        has_abbr = self.abbr_dict.get(abbr)
        return has_abbr is None or (has_abbr and word in self.dict)

    def to_abbr(self, word: str) -> str:
        n = len(word)
        if n <= 2:
            return word
        return f"{word[0]}{n - 2}{word[-1]}"
Ставь 👍 и забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по
Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по тематикам и регионам • Умный подбор каналов • Гибкие модели оплаты (CPC и CPV) Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

Задача: 1329. Sort the Matrix Diagonally Сложность: medium Диагональ матрицы — это диагональная линия ячеек, начинающаяся с какой-либо ячейки в самой верхней строке или в самом левом столбце и идущая в направлении вниз-вправо до конца матрицы. Например, диагональ матрицы, начинающаяся с mat[2][0], где mat — это матрица размером 6 x 3, включает ячейки mat[2][0], mat[3][1] и mat[4][2]. Дана матрица mat размером m x n, состоящая из целых чисел. Отсортируйте каждую диагональ матрицы по возрастанию и верните полученную матрицу. Пример:
Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]
👨‍💻 Алгоритм: 1⃣Сохраните размеры матрицы m и n. Создайте хеш-карту из минимальных куч для хранения элементов диагоналей. 2⃣Вставьте значения в хеш-карту, используя разность между индексами строки и столбца как ключ, чтобы собирать элементы на одной и той же диагонали. 3⃣Извлеките значения из хеш-карты и обновите матрицу, заполняя ее отсортированными значениями диагоналей. Верните отсортированную матрицу. 😎 Решение:
import heapq
from collections import defaultdict

class Solution:
    def diagonalSort(self, mat: List[List[int]]) -> List[List[int]]:
        m, n = len(mat), len(mat[0])
        diagonals = defaultdict(list)
        
        for row in range(m):
            for col in range(n):
                heapq.heappush(diagonals[row - col], mat[row][col])
        
        for row in range(m):
            for col in range(n):
                mat[row][col] = heapq.heappop(diagonals[row - col])
        
        return mat
Ставь 👍 и забирай 📚 Базу знаний

Яндекс приглашает опытных аналитиков на мероприятия Мы собрали календарь событий для продуктовых и data-аналитиков, data scie
Яндекс приглашает опытных аналитиков на мероприятия Мы собрали календарь событий для продуктовых и data-аналитиков, data scientists, маркетинговых и бизнес-аналитиков: ✅ Welcome time — уютные офлайн-встречи. Обсуждаем внутреннюю кухню команд Поисковых сервисов и ИИ, делимся кейсами и неформально общаемся. ✅ Data Driven — главная конференция года про анализ данных для бизнес-решений. ✅ Подкаст и ТГ-канал для тех, кто любит погружаться в детали. Также периодически проводим мероприятия с быстрым офером. Заглядывайте на страничку, чтобы узнать больше, и приходите знакомиться с коллегами по цеху и делиться экспертизой. Перейти на сайт #реклама yandex.ru О рекламодателе

Задача: 1099. Two Sum Less Than K Сложность: easy Дан массив целых чисел nums и целое число k. Верните максимальную сумму, такую что существуют i < j, при которых nums[i] + nums[j] = sum и sum < k. Если не существует таких i и j, удовлетворяющих этому условию, верните -1. Пример:
Input: nums = [34,23,1,24,75,33,54,8], k = 60
Output: 58
Explanation: We can use 34 and 24 to sum 58 which is less than 60.
👨‍💻 Алгоритм: 1⃣Отсортируйте массив. 2⃣Установите указатели: левый на начало массива, правый на конец. 3⃣Пока левый указатель меньше правого: Если сумма элементов по указателям меньше k, обновите максимальную сумму и сдвиньте левый указатель вправо. Иначе сдвиньте правый указатель влево. Верните максимальную сумму. 😎 Решение:
class Solution:
    def twoSumLessThanK(self, nums, k):
        answer = -1
        count = [0] * 1001
        for num in nums:
            count[num] += 1
        lo, hi = 1, 1000
        while lo <= hi:
            if lo + hi >= k or count[hi] == 0:
                hi -= 1
            else:
                if count[lo] > (0 if lo < hi else 1):
                    answer = max(answer, lo + hi)
                lo += 1
        return answer
Ставь 👍 и забирай 📚 Базу знаний

Задача: 934. Shortest Bridge Сложность: medium Вам дана двоичная матричная сетка n x n, где 1 обозначает сушу, а 0 - воду. Остров - это 4-направленно связанная группа из 1, не соединенная ни с одной другой 1. В сетке ровно два острова. Вы можете поменять 0 на 1, чтобы соединить два острова в один. Верните наименьшее количество 0, которое нужно перевернуть, чтобы соединить два острова. Пример:
Input: grid = [[0,1],[1,0]]
Output: 1
👨‍💻 Алгоритм: 1⃣Найти все клетки, принадлежащие первому острову, используя DFS/BFS, и добавить их в очередь для последующего расширения. 2⃣Использовать BFS для расширения из каждой клетки первого острова, чтобы найти кратчайший путь к клетке второго острова. 3⃣Вернуть длину кратчайшего пути. 😎 Решение:
from collections import deque

def shortestBridge(grid):
    n = len(grid)
    
    def neighbors(x, y):
        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
            if 0 <= x + dx < n and 0 <= y + dy < n:
                yield x + dx, y + dy
    
    def bfs(queue):
        visited = set(queue)
        steps = 0
        while queue:
            new_queue = []
            for x, y in queue:
                for nx, ny in neighbors(x, y):
                    if (nx, ny) not in visited:
                        if grid[nx][ny] == 1:
                            return steps
                        visited.add((nx, ny))
                        new_queue.append((nx, ny))
            queue = new_queue
            steps += 1
    
    def find_first_island():
        for i in range(n):
            for j in range(n):
                if grid[i][j] == 1:
                    queue = deque([(i, j)])
                    grid[i][j] = -1
                    island = [(i, j)]
                    while queue:
                        x, y = queue.popleft()
                        for nx, ny in neighbors(x, y):
                            if grid[nx][ny] == 1:
                                grid[nx][ny] = -1
                                queue.append((nx, ny))
                                island.append((nx, ny))
                    return island
    
    island = find_first_island()
    return bfs(island)
Ставь 👍 и забирай 📚 Базу знаний

Один из главных мифов вокруг ИИ-кодинга: достаточно найти правильный промпт — и модель начнет писать хороший код Но на практике два разработчика могут отправить одинаковый запрос: «создай API для пользователей» — и получить совершенно разный результат. Один получит аккуратный FastAPI-сервис с типами, тестами и обработкой ошибок. Другой — код, который придется переписывать после первого изменения. Причина часто не в модели. LLM (большие языковые модели) не знает, как устроен ваш проект: какие архитектурные решения приняты, какие стандарты действуют и что команда считает качественным результатом. Поэтому стоит выстраивать вокруг ИИ тот же инженерный слой, который уже есть в обычной разработке: правила проекта, чек-листы, автоматические проверки и понятные критерии качества. На бесплатном вебинаре karpovꓸcourses «ИИ-агенты и профессиональная разработка на Python» Алексей Жиряков покажет вживую, почему ИИ-код ломается в реальных проектах и как это исправлять. Алексей — исполнительный директор в Сбере, занимается развитием генеративного ИИ, а до этого более 15 лет работал в backend-разработке и руководил инженерными командами. Будет живое демо поверх готового репозитория: как настроить процесс, получить более чистый типизированный код и использовать продакшен-подход вроде связки «дешевая модель пишет — дорогая ревьюит», которая помогает снижать стоимость генерации. Присоединяйтесь по ссылке, а после регистрации вы получите гайд «Почему ваш ИИ пишет не то: LLM против ИИ-агента»: https://clc.to/erid_2W5zFGkYPEH Реклама. ООО «КАРПОВ КУРСЫ». ИНН 7811764627. erid: 2W5zFGkYPEH

Задача: 26. Remove Duplicates from Sorted Array Сложность: easy Учитывая целочисленный массив чисел, отсортированный в неубывающем порядке, удалите дубликаты на месте так, чтобы каждый уникальный элемент появлялся только один раз. Относительный порядок элементов должен оставаться неизменным. Затем верните количество уникальных элементов в числах. Считайте, что количество уникальных элементов чисел равно k. Чтобы вас приняли, вам нужно сделать следующее: - Измените массив nums так, чтобы первые k элементов nums содержали уникальные элементы в том порядке, в котором они присутствовали в nums изначально. Остальные элементы nums не важны, как и размер nums. - Вернуть k. Пример:
Input: nums = [1,1,2]  
Output: 2, nums = [1,2,_]  
👨‍💻 Алгоритм: 1️⃣Используем два указателя: один для уникальных элементов, другой для прохода по массиву. 2️⃣Перебираем массив, добавляя уникальные элементы на место. 3️⃣Возвращаем количество уникальных элементов. 😎 Решение:
from typing import List  

class Solution:  
    def removeDuplicates(self, nums: List[int]) -> int:  
        i = 0    
        while i < len(nums) - 1:     
            if nums[i] == nums[i + 1]:  
                nums.pop(i + 1)     
            else:  
                i += 1    

        return len(nums)
Ставь 👍 и забирай 📚 Базу знаний

Нужен мессенджер для работы? Битрикс24 — ваш мессенджер для работы и бизнеса. Личные и групповые чаты, видеозвонки и каналы в одном сервисе. Приглашайте коллег и внешние команды. Работает как привычный мессенджер. Есть бесплатный тариф. Начните работать уже сейчас. Битрикс24 — мессенджер для вашей компании. Попробовать #реклама 16+ bitrix24.ru О рекламодателе

Осталось 3 часа до конца акции: «Пожизненный PRO тариф — по цене 1 года» Поиск работы отнимает силы, время и веру в себя, но
Осталось 3 часа до конца акции: «Пожизненный PRO тариф — по цене 1 года» Поиск работы отнимает силы, время и веру в себя, но не у тех кто использует easyoffer PRO. Успей сделать самую выгодную инвестицию в развитие своей карьеры. Акция закончится уже сегодня 23 июня 23:59 по мск: 👉 https://easyoffer.ru/pro