ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

Python | LeetCode

Python | LeetCode

前往频道在 Telegram

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

显示更多
8 982
订阅者
-424 小时
-217 天
-9030 天
吸引订阅者
10月 '26
十月 '26
+25
在0个频道中
九月 '26
+42
在0个频道中
Get PRO
八月 '26
+43
在1个频道中
Get PRO
七月 '26
+36
在0个频道中
Get PRO
六月 '26
+44
在2个频道中
Get PRO
五月 '26
+40
在0个频道中
Get PRO
四月 '26
+47
在0个频道中
Get PRO
三月 '26
+50
在0个频道中
Get PRO
二月 '26
+42
在0个频道中
Get PRO
一月 '26
+69
在0个频道中
Get PRO
十二月 '25
+55
在0个频道中
Get PRO
十一月 '25
+105
在0个频道中
Get PRO
十月 '25
+110
在0个频道中
Get PRO
九月 '25
+67
在0个频道中
Get PRO
八月 '25
+112
在1个频道中
Get PRO
七月 '25
+128
在4个频道中
Get PRO
六月 '25
+129
在2个频道中
Get PRO
五月 '25
+166
在3个频道中
Get PRO
四月 '25
+178
在0个频道中
Get PRO
三月 '25
+217
在3个频道中
Get PRO
二月 '25
+343
在6个频道中
Get PRO
一月 '25
+307
在53个频道中
Get PRO
十二月 '24
+150
在0个频道中
Get PRO
十一月 '24
+174
在0个频道中
Get PRO
十月 '24
+725
在15个频道中
Get PRO
九月 '24
+3 750
在329个频道中
Get PRO
八月 '24
+260
在0个频道中
Get PRO
七月 '24
+2 514
在219个频道中
Get PRO
六月 '24
+3 546
在232个频道中
日期
订阅者增长
提及
频道
26 十月+1
25 十月0
24 十月0
23 十月0
22 十月+1
21 十月+1
20 十月+2
19 十月0
18 十月+2
17 十月+1
16 十月+1
15 十月+1
14 十月0
13 十月+1
12 十月0
11 十月+1
10 十月+1
09 十月+2
08 十月+3
07 十月+1
06 十月+1
05 十月+2
04 十月0
03 十月+1
02 十月0
01 十月+2
频道帖子
Задача: 179. Largest Number Сложность: medium Дан список неотрицательных целых чисел nums. Организуйте их таким образом, чтобы они составляли наибольшее число и верните его. Поскольку результат может быть очень большим, вам необходимо вернуть строку вместо целого числа. Пример:
Input: nums = [10,2]
Output: "210"
👨‍💻 Алгоритм: 1️⃣Преобразование и сортировка: Преобразовать каждое число в строку и отсортировать массив строк с использованием специального компаратора, который для двух строк 𝑎 и b сравнивает результаты конкатенации 𝑎+𝑏 и 𝑏+𝑎. 2️⃣Проверка на нули: Если после сортировки первый элемент массива равен "0", вернуть "0", так как все числа в массиве нули. 3️⃣Формирование результата: Конкатенировать отсортированные строки для формирования наибольшего числа и вернуть это число в виде строки. 😎 Решение:
class LargerNumKey(str):
    def __lt__(x, y):
        return x + y > y + x


class Solution:
    def largestNumber(self, nums):
        largest_num = "".join(sorted(map(str, nums), key=LargerNumKey))
        return "0" if largest_num[0] == "0" else largest_num
Ставь 👍 и забирай 📚 Базу знаний

2
Задача: 893. Groups of Special-Equivalent Strings Сложность: medium Вам дан массив строк одинаковой длины words. За один ход вы можете поменять местами любые два четных или любые два нечетных символа строки words[i]. Две строки words[i] и words[j] являются специально-эквивалентными, если после любого количества ходов words[i] == words[j]. Например, words[i] = "zzxy" и words[j] = "xyzz" являются специально-эквивалентными, потому что мы можем делать ходы "zzxy" -> "xzzy" -> "xyzz". Группа специально-эквивалентных строк из слов - это непустое подмножество слов, такое, что: каждая пара строк в группе специально-эквивалентна, и группа имеет максимально возможный размер (т.е, не существует строки words[i], не входящей в группу, такой, что words[i] является специально-эквивалентной каждой строке в группе). Верните количество групп специально-эквивалентных строк из слов. Пример: Input: words = ["abcd","cdab","cbad","xyzz","zzxy","zzyx"] Output: 3 👨‍💻 Алгоритм: 1⃣Для каждой строки в массиве words создать два новых списка: один из символов на четных позициях, другой из символов на нечетных позициях. Отсортировать оба списка и объединить их в одну строку, которая будет представлять каноническую форму строки. 2⃣Использовать множество, чтобы хранить все уникальные канонические формы строк. 3⃣Размер множества будет равен количеству групп специально-эквивалентных строк. 😎 Решение: def numSpecialEquivGroups(words): unique_forms = set() for word in words: even_chars = sorted(word[0::2]) odd_chars = sorted(word[1::2]) canonical_form = ''.join(even_chars + odd_chars) unique_forms.add(canonical_form) Ставь 👍 и забирай 📚 Базу знаний
245
3
Какие ИИ-инструменты брать в работу, а какие пропустить После этого урока картина станет понятнее: что подходит для ежедневны
Какие ИИ-инструменты брать в работу, а какие пропустить После этого урока картина станет понятнее: что подходит для ежедневных задач Python-разработчика, а что можно не пробовать. Открытый урок «Инструменты на базе ИИ для Python-разработчиков» пройдет 19 ноября в 20:00 онлайн. Разберем примеры из реальной разработки и поговорим о том, как не тратить время зря. На уроке: - какие инструменты ускоряют работу - для каких задач их стоит брать 📚Курс «Python-разработчик. Продвинутый уровень» стартует 30 ноября. Зарегистрироваться #реклама 16+ otus.ru О рекламодателе
330
4
Задача: 751. IP to CIDR Сложность: medium Дан указатель на начало односвязного списка и два целых числа left и right, где left <= right. Необходимо перевернуть узлы списка, начиная с позиции left и заканчивая позицией right, и вернуть измененный список. Пример: Input: ip = "255.0.0.7", n = 10 Output: ["255.0.0.7/32","255.0.0.8/29","255.0.0.16/32"] 👨‍💻 Алгоритм: 1⃣Преобразовать начальный IP-адрес в целое число. 2⃣Пока количество оставшихся IP-адресов n больше нуля: Определить наибольший блок, который начинается с текущего IP-адреса и не превышает количество оставшихся IP-адресов. Добавить этот блок к результату. Увеличить текущий IP-адрес на размер блока. Уменьшить количество оставшихся IP-адресов n. 3⃣Преобразовать блоки обратно в формат CIDR и вернуть их. 😎 Решение: def ip_to_int(ip): parts = ip.split('.') return (int(parts[0]) << 24) + (int(parts[1]) << 16) + (int(parts[2]) << 8) + int(parts[3]) def int_to_ip(num): return f"{(num >> 24) & 255}.{(num >> 16) & 255}.{(num >> 8) & 255}.{num & 255}" def cidr(ip, prefix_length): return f"{ip}/{prefix_length}" def find_cidr_blocks(start_ip, n): start = ip_to_int(start_ip) result = [] while n > 0: max_size = 1 while max_size <= start and max_size <= n: max_size <<= 1 max_size >>= 1 while start % max_size != 0: max_size >>= 1 result.append(cidr(int_to_ip(start), 32 - max_size.bit_length() + 1)) start += max_size n -= max_size return result Ставь 👍 и забирай 📚 Базу знаний
348
5
Задача: 1009. Complement of Base 10 Integer Сложность: easy Дополнение целого числа - это целое число, которое получается, если перевернуть все 0 в 1 и все 1 в 0 в его двоичном представлении. Например, целое число 5 - это "101" в двоичном представлении, а его дополнение - "010", то есть целое число 2. Если задано целое число n, верните его дополнение. Пример: Input: n = 5 Output: 2 👨‍💻 Алгоритм: 1⃣Определение длины двоичного представления: Найдите длину двоичного представления числа n. 2⃣Создание маски: Создайте маску, которая состоит из всех единиц и имеет ту же длину, что и двоичное представление числа n. 3⃣Вычисление дополнения: Примените побитовую операцию XOR между числом n и маской, чтобы получить дополнение числа. 😎 Решение: class Solution: def findComplement(self, num: int) -> int: length = num.bit_length() mask = (1 << length) - 1 return num ^ mask Ставь 👍 и забирай 📚 Базу знаний
394
6
Ваши финансы собраны или рассредоточены? Всплеск глобального долга — напоминание, что ликвидность и её цена перераспределяются. ✅ DMA-счёт от «Финам» для юрлиц собирает все рынки и классы активов в единое управление: акции, РЕПО, обеспечение, прямые заявки — в одном счёте. • Единый пул ликвидности: все рынки и бумаги • РЕПО, обеспечение, прямые стаканы • Неттирование арбитражных позиций между рынками Мосбиржи • Гибкие ставки риска и фондирование под потребности компании 💻 Технические вопросы решаются напрямую с инженерами, без тикетов. Запросите встречу с командой DMA. Информация не является индивидуальной инвестиционной рекомендацией и не гарантирует доходности. Инвестиции связаны с риском. Перейти на сайт Финансовые услуги оказывает: АО «Инвестиционная компания «ФИНАМ». #реклама broker.finam.ru О рекламодателе
358
7
Задача: 1272. Remove Interval Сложность: medium Множество вещественных чисел можно представить как объединение нескольких несовпадающих интервалов, где каждый интервал имеет вид [a, b). Вещественное число x входит в множество, если один из его интервалов [a, b) содержит x (то есть a <= x < b). Вам дан отсортированный список непересекающихся интервалов, представляющих множество вещественных чисел, как описано выше, где intervals[i] = [ai, bi] представляет интервал [ai, bi). Вам также дан еще один интервал toBeRemoved. Верните набор вещественных чисел с интервалом toBeRemoved, удаленным из intervals. Другими словами, верните набор вещественных чисел, каждый x в котором находится в интервале, но не в toBeRemoved. Вашим ответом должен быть отсортированный список непересекающихся интервалов, как описано выше. Пример: Input: intervals = [[0,2],[3,4],[5,7]], toBeRemoved = [1,6] Output: [[0,1],[6,7]] 👨‍💻 Алгоритм: 1⃣Итерируйтесь по каждому интервалу в списке intervals. 2⃣Для каждого интервала, проверяйте пересечения с toBeRemoved и обновляйте список результатов. 3⃣Добавляйте непересекающиеся части текущего интервала в результат. 😎 Решение: def removeInterval(intervals, toBeRemoved): result = [] for start, end in intervals: if start < toBeRemoved[0]: result.append([start, min(end, toBeRemoved[0])]) if end > toBeRemoved[1]: result.append([max(start, toBeRemoved[1]), end]) return result Ставь 👍 и забирай 📚 Базу знаний
460
8
Ищем менеджеров нейросетей, можно без опыта Опыт не нужен. Только телефон. Занятость — 3-6 часов в день. Нужно выполнять зада
Ищем менеджеров нейросетей, можно без опыта Опыт не нужен. Только телефон. Занятость — 3-6 часов в день. Нужно выполнять задачи с помощью нейросетей. Все это вы делаете из дома. Всему обучим на бесплатном курсе и после поможем со стартом. Что вас ждет за 3 дня: ✅ Уроки с практикой по 30 минут ✅ Домашние задания с проверкой и оплатой бонусами ✅ Выплата за каждую выполненную работу 🎓 Все, кто пройдет обучение, получат сертификат от школы с образовательной лицензией. Набор закрывается, как только группа заполнится. Чтобы занять место нажмите "Зарегистрироваться". Зарегистрироваться #реклама 16+ course.neurogansta.ru О рекламодателе
405
9
Задача: 1481. Least Number of Unique Integers after K Removals Сложность: medium Дан массив целых чисел arr и целое число k. Найдите минимальное количество уникальных целых чисел после удаления ровно k элементов. Пример: Input: arr = [5,5,4], k = 1 Output: 1 Explanation: Remove the single 4, only 5 is left. 👨‍💻 Алгоритм: 1⃣Инициализация и построение частотного массива: Создайте хеш-таблицу для отслеживания частот элементов массива arr. Итеративно увеличивайте частоту элементов в хеш-таблице. 2⃣Сортировка и удаление элементов: Создайте массив частот и заполните его значениями из хеш-таблицы. Отсортируйте массив частот. Инициализируйте переменную для отслеживания числа удаленных элементов и итеративно добавляйте частоты, пока количество удаленных элементов не превысит k. 3⃣Возвращение результата: Если количество удаленных элементов превысило k, верните оставшееся количество уникальных элементов. Если все элементы были удалены, верните 0. 😎 Решение: class Solution: def findLeastNumOfUniqueInts(self, arr, k): from collections import Counter freq_map = Counter(arr) frequencies = sorted(freq_map.values()) elements_removed = 0 for i, freq in enumerate(frequencies): elements_removed += freq if elements_removed > k: return len(frequencies) - i return 0 Ставь 👍 и забирай 📚 Базу знаний
458
10
Telegram-бот на Python, собранный с нуля Можно долго читать про Python, а можно за один урок пройти путь от идеи до бота, кот
Telegram-бот на Python, собранный с нуля Можно долго читать про Python, а можно за один урок пройти путь от идеи до бота, который отвечает пользователю. Именно так построен открытый урок «Telegram-бот с нуля на Python: от теории к практике». Подойдет тем, кто знает основы языка и ищет практическую задачу. Без громких обещаний: рабочий пример, который можно разобрать и повторить в одиночку. На уроке: - пройдем путь от идеи до работающего бота - посмотрим, как бот принимает сообщения и команды - разберем, как он отвечает Урок 10.11 в 20:00. Зарегистрироваться #реклама 16+ otus.ru О рекламодателе
438
11
Задача: 1254. Number of Closed Islands Сложность: medium Дана двумерная сетка, состоящая из 0 (земля) и 1 (вода).Остров - это максимальная 4-направленно связная группа из 0s, а закрытый остров - это остров, полностью (слева, сверху, справа, снизу) окруженный 1s. Верните количество закрытых островов. Пример: Input: grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]] Output: 2 👨‍💻 Алгоритм: 1⃣Пройдите по границам сетки и с помощью поиска в глубину (DFS) или поиска в ширину (BFS) замените все связанные земли (0) на воду (1). 2⃣Пройдите по всей сетке, используя DFS или BFS для поиска всех оставшихся островов (групп 0) 3⃣Подсчитайте количество таких островов. 😎 Решение: def closedIsland(grid): def dfs(x, y): if x < 0 or y < 0 or x >= len(grid) or y >= len(grid[0]) or grid[x][y] == 1: return grid[x][y] = 1 dfs(x + 1, y) dfs(x - 1, y) dfs(x, y + 1) dfs(x, y - 1) for i in range(len(grid)): for j in range(len(grid[0])): if (i == 0 or i == len(grid) - 1 or j == 0 or j == len(grid[0]) - 1) and grid[i][j] == 0: dfs(i, j) count = 0 for i in range(1, len(grid) - 1): for j in range(1, len(grid[0]) - 1): if grid[i][j] == 0: dfs(i, j) count += 1 return count Ставь 👍 и забирай 📚 Базу знаний
488
12
🔥 Скрытые вакансии с удаленной работой для Python разработчика, которые нигде больше не публикуются. Напрямую от компаний, с
🔥 Скрытые вакансии с удаленной работой для Python разработчика, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров. 🔹 Python Jobs | Вакансии 🔹 Data Science ML | Вакансии 🔹 Golang Go Jobs | Вакансии 🔸 Все каналы с вакансиями
513
13
Почувствуйте ритм Дубая с отелями Jumeirah Семейный отдых обретает свой ритм - время для открытий, игр и особенных моментов в
Почувствуйте ритм Дубая с отелями Jumeirah Семейный отдых обретает свой ритм - время для открытий, игр и особенных моментов вместе. Узнать больше #реклама jumeirah.com О рекламодателе
461
14
Задача: 641. Design Circular Deque Сложность: medium Разработайте свою реализацию круговой двусторонней очереди (deque). Реализуйте класс MyCircularDeque: MyCircularDeque(int k) Инициализирует deque с максимальным размером k. boolean insertFront() Добавляет элемент в переднюю часть Deque. Возвращает true, если операция прошла успешно, или false в противном случае. boolean insertLast() Добавляет элемент в заднюю часть Deque. Возвращает true, если операция выполнена успешно, или false в противном случае. boolean deleteFront() Удаляет элемент из передней части Deque. Возвращает true, если операция прошла успешно, или false в противном случае. boolean deleteLast() Удаляет элемент из задней части Deque. Возвращает true, если операция прошла успешно, или false в противном случае. int getFront() Возвращает передний элемент из Deque. Возвращает -1, если Deque пуст. int getRear() Возвращает последний элемент из Deque. Возвращает -1, если Deque пуст. boolean isEmpty() Возвращает true, если Deque пуст, или false в противном случае. boolean isFull() Возвращает true, если Deque полон, или false в противном случае. Пример: Input ["MyCircularDeque", "insertLast", "insertLast", "insertFront", "insertFront", "getRear", "isFull", "deleteLast", "insertFront", "getFront"] [[3], [1], [2], [3], [4], [], [], [], [4], []] Output [null, true, true, true, false, 2, true, true, true, 4] 👨‍💻 Алгоритм: 1⃣Инициализация и проверка состояний: Реализуйте конструктор для инициализации кольцевой двусторонней очереди заданного размера и методы для проверки пустоты и полноты очереди. 2⃣Операции вставки: Реализуйте методы вставки элементов в переднюю и заднюю части очереди с учетом кольцевой структуры. 3⃣Операции удаления: Реализуйте методы удаления элементов из передней и задней частей очереди с учетом кольцевой структуры и методы для получения переднего и заднего элементов очереди. 😎 Решение: class MyCircularDeque: def __init__(self, k: int): self.k = k self.deque = [0] * k self.front = 0 self.rear = 0 self.size = 0 def insertFront(self, value: int) -> bool: if self.isFull(): return False self.front = (self.front - 1) % self.k self.deque[self.front] = value self.size += 1 return True def insertLast(self, value: int) -> bool: if self.isFull(): return False self.deque[self.rear] = value self.rear = (self.rear + 1) % self.k self.size += 1 return True def deleteFront(self) -> bool: if self.isEmpty(): return False self.front = (self.front + 1) % self.k self.size -= 1 return True def deleteLast(self) -> bool: if self.isEmpty(): return False self.rear = (self.rear - 1 + self.k) % self.k self.size -= 1 return True def getFront(self) -> int: if self.isEmpty(): return -1 return self.deque[self.front] def getRear(self) -> int: if self.isEmpty(): return -1 return self.deque[(self.rear - 1 + self.k) % self.k] def isEmpty(self) -> bool: return self.size == 0 def isFull(self) -> bool: return self.size == self.k Ставь 👍 и забирай 📚 Базу знаний
531
15
Нужны 7 желающих для работы с искусственным интеллектом. Работа из дома. График свободный. Пришло задание — изучили — выполни
Нужны 7 желающих для работы с искусственным интеллектом. Работа из дома. График свободный. Пришло задание — изучили — выполнили — получили свои деньги. Деньги вы получаете в зависимости от сложности задания. Например: За задание могут платить 500-10.000 рублей. В зависимости от сложности. 500 рублей — это около 5-30 минут. 10 000 руб. это 5-6 часов. Работа может быть разной: Оживить фото, создать видео, реставрировать старое фото и т.д. 💰 В среднем новичок получает до 150.000 руб в месяц. А опытный может и 300-500т. Мы обучим вас сами: — 3 дня уроков по 30 минут — Домашки с проверкой ⚡ Набор заканчивается завтра. Для регистрации жмите кнопку "Зарегистрироваться": Зарегистрироваться #реклама 16+ neuromachina.ru О рекламодателе
426
16
Задача: 1506. Find Root of N-Ary Tree Сложность: medium Вам даны все узлы N-арного дерева в виде массива объектов Node, где каждый узел имеет уникальное значение. Верните корень N-арного дерева. Пример: Input: tree = [1,null,3,2,4,null,5,6] Output: [1,null,3,2,4,null,5,6] Explanation: The tree from the input data is shown above. The driver code creates the tree and gives findRoot the Node objects in an arbitrary order. For example, the passed array could be [Node(5),Node(4),Node(3),Node(6),Node(2),Node(1)] or [Node(2),Node(6),Node(1),Node(3),Node(5),Node(4)]. The findRoot function should return the root Node(1), and the driver code will serialize it and compare with the input data. The input data and serialized Node(1) are the same, so the test passes. 👨‍💻 Алгоритм: 1⃣Используйте хэшсет (named as seen) для отслеживания всех посещенных дочерних узлов. В конечном итоге корневой узел не будет в этом множестве. 2⃣Выполняйте первую итерацию, проходя по элементам входного списка. Для каждого элемента добавляйте его дочерние узлы в хэшсет seen. Поскольку значение каждого узла уникально, можно добавлять либо сам узел, либо просто его значение в хэшсет. 3⃣Посетите список еще раз. На этот раз у нас будут все дочерние узлы в хэшсете. Как только вы наткнетесь на узел, который не находится в хэшсете, это и будет корневой узел, который мы ищем. 😎 Решение: class Solution: def findRoot(self, tree: List['Node']) -> 'Node': seen = set() for node in tree: for child in node.children: seen.add(child.val) for node in tree: if node.val not in seen: return node Ставь 👍 и забирай 📚 Базу знаний
530
17
Получите удаленную подработку, где платят 5.000 ₽ в день Нужно заполнять карточки товаров на ВБ, писать описания товаров и от
Получите удаленную подработку, где платят 5.000 ₽ в день Нужно заполнять карточки товаров на ВБ, писать описания товаров и отвечать на отзывы. Все это вы делаете из дома. Бесплатная регистрация только сегодня! Опыт, знания и город — не важны! От вас требуется только телефон. Занятость 3-6 часов в день. График свободный. Заработок зависит от вас. Над вами нет никаких начальников. А самое важное, у вас не будет нужды просыпаться в 6 утра на работу. Для старта в профессии нужно пройти бесплатное 3х-дневное обучение: ✅ Прямые эфиры, где вы поймете суть профессии ✅ Домашки с проверкой и оплатой бонусами ✅ Платим 10 тыс за каждую выполненную домашку Все кто пройдет курс, получат сертификат от школы с образовательной лицензией. ⚡ Начинаем в понедельник! Жмите снизу "Зарегистрироваться": Зарегистрироваться #реклама 16+ course.wildcard.ru О рекламодателе
343
18
Задача: 409. Longest Palindrome Сложность: easy Если задана строка s, состоящая из строчных или прописных букв, верните длину самого длинного палиндрома, который можно построить из этих букв. Буквы чувствительны к регистру, например, "Aa" не считается палиндромом. Пример: Input: s = "abccccdd" Output: 7 👨‍💻 Алгоритм: 1⃣Создайте словарь для подсчета количества каждого символа в строке. 2⃣Пройдитесь по словарю и добавьте четное количество каждого символа к длине палиндрома. Если встречается нечетное количество символа, добавьте (count - 1) к длине палиндрома. 3⃣Если есть хотя бы один символ с нечетным количеством, добавьте 1 к длине палиндрома для центрального символа. 😎 Решение: def longestPalindrome(s): charCount = {} for char in s: charCount[char] = charCount.get(char, 0) + 1 length = 0 oddFound = False for count in charCount.values: if count % 2 == 0: length += count else: length += count - 1 oddFound = True return length + 1 if oddFound else length Ставь 👍 и забирай 📚 Базу знаний
457
19
Задача: 1539. Kth Missing Positive Number Сложность: easy Дан массив arr из положительных целых чисел, отсортированных в строго возрастающем порядке, и целое число k. Верните k-й положительный целочисленный элемент, который отсутствует в этом массиве. Пример: Input: arr = [2,3,4,7,11], k = 5 Output: 9 Explanation: The missing positive integers are [1,5,6,8,9,10,12,13,...]. The 5th missing positive integer is 9. 👨‍💻 Алгоритм: 1⃣Проверьте, является ли k-й отсутствующий номер меньше первого элемента массива. Если это так, верните k. Уменьшите k на количество положительных чисел, отсутствующих до начала массива: k -= arr[0] - 1. 2⃣Итерируйтесь по элементам массива. На каждом шаге вычисляйте количество отсутствующих положительных чисел между i+1-м и i-м элементами: currMissing = arr[i + 1] - arr[i] - 1. Сравните k с currMissing. Если k <= currMissing, то число для возврата находится между arr[i + 1] и arr[i], и вы можете его вернуть: arr[i] + k. В противном случае уменьшите k на currMissing и продолжайте. 3⃣Если элемент, который нужно вернуть, больше последнего элемента массива, верните его: arr[n - 1] + k. 😎 Решение: class Solution: def findKthPositive(self, arr: List[int], k: int) -> int: if k <= arr[0] - 1: return k k -= arr[0] - 1 n = len(arr) for i in range(n - 1): currMissing = arr[i + 1] - arr[i] - 1 if k <= currMissing: return arr[i] + k k -= currMissing return arr[-1] + k Ставь 👍 и забирай 📚 Базу знаний
442
20
Задача: 1236. Web Crawler Сложность: medium Учитывая url startUrl и интерфейс HtmlParser, реализуйте веб-краулер для просмотра всех ссылок, которые находятся под тем же именем хоста, что и startUrl.Верните все ссылки, полученные вашим краулером, в любом порядке. Ваш краулер должен: Начинать со страницы: startUrl Вызывать HtmlParser.getUrls(url), чтобы получить все ссылки с веб-страницы с заданным url. Не просматривайте одну и ту же ссылку дважды. Исследуйте только те ссылки, которые находятся под тем же именем хоста, что и startUrl. Как показано в примере url выше, имя хоста - example.org. Для простоты можно считать, что все урлы используют протокол http без указания порта. Например, урлы http://leetcode.com/problems и http://leetcode.com/contest находятся под одним и тем же именем хоста, а урлы http://example.org/test и http://example.com/abc не находятся под одним и тем же именем хоста. Пример: Input: urls = [ "http://news.yahoo.com", "http://news.yahoo.com/news", "http://news.yahoo.com/news/topics/", "http://news.google.com", "http://news.yahoo.com/us" ] edges = [[2,0],[2,1],[3,2],[3,1],[0,4]] startUrl = "http://news.yahoo.com/news/topics/" Output: [ "http://news.yahoo.com", "http://news.yahoo.com/news", "http://news.yahoo.com/news/topics/", "http://news.yahoo.com/us" ] 👨‍💻 Алгоритм: 1⃣Извлечение имени хоста: Сначала извлекаем имя хоста из начального URL для проверки всех последующих ссылок. 2⃣Использование очереди для BFS: Начинаем с начального URL и помещаем его в очередь. Пока очередь не пуста, извлекаем текущий URL, получаем все ссылки с этой страницы, и для каждой ссылки проверяем, принадлежит ли она тому же имени хоста. 3⃣Если да, и если мы еще не посещали эту ссылку, добавляем ее в очередь и отмечаем как посещенную. 😎 Решение: class HtmlParser: def getUrls(self, url: str) -> [str]: pass def extractHostname(url): from urllib.parse import urlparse parsed_url = urlparse(url) return parsed_url.netloc def crawl(startUrl: str, htmlParser: HtmlParser) -> [str]: from collections import deque hostname = extractHostname(startUrl) visited = set() queue = deque([startUrl]) visited.add(startUrl) while queue: url = queue.popleft() for next_url in htmlParser.getUrls(url): if next_url not in visited and extractHostname(next_url) == hostname: visited.add(next_url) queue.append(next_url) return list(visited) Ставь 👍 и забирай 📚 Базу знаний
469