Latest posts

PHP | LeetCode
10 Sept, 16:11
Задача: 1496. Path Crossing Сложность: easyДана строка path, где path[i] = 'N', 'S', 'E' или 'W', каждая из которых представляет движение на одну единицу на север, юг, восток или запад соответственно. Вы начинаете с точки (0, 0) на 2D плоскости и идете по пути, указанному в path.Верните true, если путь пересекает сам себя в какой-либо точке, то есть если вы в какой-то момент окажетесь в месте, которое уже посещали ранее. В противном случае верните false.Пример: Input: path = "NESWW" Output: true Explanation: Notice that the path visits the origin twice.👨💻 Алгоритм:1⃣Инициализация переменных: Создать хэш-карту moves, которая сопоставляет символы 'N', 'S', 'E', 'W' с соответствующими значениями. Инициализировать множество visited с начальной точкой (0, 0). Установить начальные координаты x = 0 и y = 0.2⃣Проход по строке path:
PHP | LeetCode
10 Sept, 09:06
Задача: 1474. Delete N Nodes After M Nodes of a Linked List Сложность: easyВам дано начало связанного списка и два целых числа m и n.Пройдите по связанному списку и удалите некоторые узлы следующим образом: Начните с головы как текущего узла. Сохраните первые m узлов, начиная с текущего узла. Удалите следующие n узлов. Продолжайте повторять шаги 2 и 3, пока не достигнете конца списка. Верните голову изменённого списка после удаления указанных узлов.Пример: Input: head = [1,2,3,4,5,6,7,8,9,10,11,12,13], m = 2, n = 3 Output: [1,2,6,7,11,12] Explanation: Keep the first (m = 2) nodes starting from the head of the linked List (1 ->2) show in black nodes. Delete the next (n = 3) nodes (3 -> 4 -> 5) show in read nodes. Continue with the same procedure until reaching the tail of the Linked List. Head of the linked list after removing nodes is returned.
PHP | LeetCode
9 Sept, 09:06
Задача: 1305. All Elements in Two Binary Search Trees Сложность: mediumДаны два бинарных дерева поиска root1 и root2. Вернуть список, содержащий все целые числа из обоих деревьев, отсортированные в порядке возрастания.Пример: Input: root1 = [2,1,4], root2 = [1,0,3] Output: [0,1,1,2,3,4]👨💻 Алгоритм:1⃣Выполните итеративный обход в порядке возрастания обоих деревьев параллельно.2⃣На каждом шаге добавляйте наименьшее доступное значение в выходной список.3⃣Верните выходной список.😎 Решение: class TreeNode { public $val;
PHP | LeetCode
8 Sept, 16:11
Задача: 487. Max Consecutive Ones II Сложность: mediumДан бинарный массив nums, верните максимальное количество последовательных единиц в массиве, если можно перевернуть не более одного нуля.Пример: Input: nums = [1,0,1,1,0] Output: 4 Explanation: - If we flip the first zero, nums becomes [1,1,1,1,0] and we have 4 consecutive ones. - If we flip the second zero, nums becomes [1,0,1,1,1] and we have 3 consecutive ones. The max number of consecutive ones is 4.👨💻 Алгоритм:1⃣Для каждого возможного начала последовательности в массиве nums начните считать количество нулей.2⃣Для каждой последовательности проверяйте, сколько нулей содержится в ней. Если количество нулей не превышает одного, обновите максимальную длину последовательности единиц.3⃣Продолжайте проверять все возможные последовательности в массиве, и верните максимальную длину последовательности единиц, удовлетворяющую
PHP | LeetCode
6 Sept, 09:06
Задача: 1038. Binary Search Tree to Greater Sum Tree Сложность: mediumПолучив корень двоичного дерева поиска (BST), преобразуйте его в большее дерево таким образом, чтобы каждый ключ исходного BST был заменен на исходный ключ плюс сумма всех ключей, превышающих исходный ключ в BST. Напомним, что двоичное дерево поиска - это дерево, удовлетворяющее следующим ограничениям: левое поддерево узла содержит только узлы с ключами меньше, чем ключ узла. Правое поддерево узла содержит только узлы с ключами больше, чем ключ узла. И левое, и правое поддеревья должны быть двоичными деревьями поиска.Пример: Input: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8] Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]👨💻 Алгоритм:1⃣Обратный обход in-order: Пройдите по дереву в порядке "правый, корень, левый" (обратный in-order обход). Это обеспечит посещение узлов в порядке
PHP | LeetCode
5 Sept, 09:06
Задача: 856. Score of Parentheses Сложность: mediumДана строка s, состоящая из сбалансированных скобок, верните счёт строки.Счёт сбалансированной строки скобок основывается на следующих правилах:"()" имеет счёт 1. AB имеет счёт A + B, где A и B — сбалансированные строки скобок. (A) имеет счёт 2 A, где A — сбалансированная строка скобок.Пример: Input: s = "()" Output: 1👨💻 Алгоритм:1⃣Назовём сбалансированную строку примитивной, если её нельзя разделить на две непустые сбалансированные строки.2⃣Отслеживая баланс (количество открывающих скобок минус количество закрывающих скобок), мы можем разделить строку S на примитивные подстроки S = P_1 + P_2 + ... + P_n. Тогда, по определению, score(S) = score(P_1) + score(P_2) + ... + score(P_n).
PHP | LeetCode
31 Aug, 09:06
Задача: 986. Interval List Intersections Сложность: mediumВам даны два списка закрытых интервалов, firstList и secondList, где firstList[i] = [starti, endi] и secondList[j] = [startj, endj]. Каждый список интервалов является попарно непересекающимся и отсортированным.Верните пересечение этих двух списков интервалов.Закрытый интервал [a, b] (где a <= b) обозначает множество действительных чисел x с a <= x <= b.Пересечение двух закрытых интервалов - это множество действительных чисел, которые либо пусты, либо представлены как закрытый интервал. Например, пересечение [1, 3] и [2, 4] равно [2, 3].Пример: Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]] Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]👨💻 Алгоритм:1⃣Инициализация указателей: Завести два указателя i и j, указывающие на начало firstList и secondList
PHP | LeetCode
30 Aug, 16:11
Задача: 846. Hand of Straights Сложность: mediumУ Алисы есть некоторое количество карт, и она хочет переставить карты в группы так, чтобы каждая группа была размером groupSize и состояла из groupSize последовательных карт.Дан целочисленный массив hand, где hand[i] — это значение, написанное на i-й карте, и целое число groupSize. Верните true, если она может переставить карты, или false в противном случае.Пример: Input: hand = [1,2,3,6,2,3,4,7,8], groupSize = 3 Output: true Explanation: Alice's hand can be rearranged as [1,2,3],[2,3,4],[6,7,8]👨💻 Алгоритм:1⃣Проверьте, делится ли длина массива hand на groupSize. Если нет, верните false.2⃣Создайте карту cardCount для хранения количества каждой карты в массиве hand.3⃣Итерируйте по массиву hand и обновляйте карту cardCount. Затем итерируйте снова для создания групп: Найдите начальную карту startCard для потенциальной
PHP | LeetCode
26 Aug, 16:11
Задача: 820. Short Encoding of Words Сложность: mediumДопустимым кодированием массива слов является любая опорная строка s и массив индексов indices, такие что:words.length == indices.length Опорная строка s заканчивается символом '#'. Для каждого индекса indices[i], подстрока строки s, начинающаяся с indices[i] и заканчивающаяся (но не включительно) следующим символом '#', равна words[i]. Дан массив слов, верните длину самой короткой возможной опорной строки s для любого допустимого кодирования слов.Пример: Input: words = ["time", "me", "bell"] Output: 10 Explanation: A valid encoding would be s = "time#bell#" and indices = [0, 2, 5]. words[0] = "time", the substring of s starting from indices[0] = 0 to the next '#' is underlined in "time#bell#" words[1] = "me", the substring of s starting from indices[1] = 2 to the next '#' is underlined in "time#bell#" words[2] = "bell", the
PHP | LeetCode
26 Aug, 09:06
Задача: 1473. Paint House III Сложность: hardЕсть ряд из m домов в маленьком городе, каждый дом должен быть покрашен одним из n цветов (обозначены от 1 до n), некоторые дома, которые были покрашены прошлым летом, не должны быть перекрашены.Соседство — это максимальная группа непрерывных домов, которые покрашены в один и тот же цвет.Например: дома = [1,2,2,3,3,2,1,1] содержат 5 соседств [{1}, {2,2}, {3,3}, {2}, {1,1}]. Дан массив домов, матрица m x n стоимости и целое число target, где: houses[i]: цвет дома i, и 0, если дом ещё не покрашен. cost[i][j]: стоимость покраски дома i в цвет j + 1. Верните минимальную стоимость покраски всех оставшихся домов таким образом, чтобы было ровно target соседств. Если это невозможно, верните -1.Пример: Input: houses = [0,0,0,0,0], cost = [[1,10],[10,1],[10,1],[1,10],[5,1]], m = 5, n = 2, target = 3 Output: 9 Explanation: Paint houses of this
PHP | LeetCode
22 Aug, 16:10
Задача: 861. Score After Flipping Matrix Сложность: mediumВам дана бинарная матрица grid размером m x n.Ход состоит из выбора любой строки или столбца и переключения каждого значения в этой строке или столбце (т.е. изменение всех 0 на 1, и всех 1 на 0).Каждая строка матрицы интерпретируется как двоичное число, и счёт матрицы — это сумма этих чисел.Верните наивысший возможный счёт после выполнения любого количества ходов (включая ноль ходов).Пример: Input: grid = [[0,0,1,1],[1,0,1,0],[1,1,0,0]] Output: 39 Explanation: 0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39👨💻 Алгоритм:1⃣Инициализируйте переменные: m и n для количества строк и столбцов в grid, score для хранения максимального счёта матрицы. Пройдитесь по первому столбцу матрицы. Если элемент равен 0, переверните всю строку.
PHP | LeetCode
21 Aug, 09:05
Задача: 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) для отслеживания всех посещенных дочерних узлов. В конечном итоге корневой
PHP | LeetCode
20 Aug, 16:10
Задача: 1208. Get Equal Substrings Within Budget Сложность: mediumВам даны две строки s и t одинаковой длины и целое число maxCost. Вы хотите преобразовать s в t. Изменение i-го символа строки s на i-й символ строки t стоит |s[i] - t[i]| (т.е. абсолютная разница между значениями ASCII символов).Верните максимальную длину подстроки s, которую можно изменить, чтобы она соответствовала соответствующей подстроке t с затратами, не превышающими maxCost. Если нет подстроки из s, которую можно изменить на соответствующую подстроку из t, верните 0.Пример: Input: s = "abcd", t = "bcdf", maxCost = 3 Output: 3 Explanation: "abc" of s can change to "bcd". That costs 3, so the maximum length is 3.👨💻 Алгоритм:1⃣Инициализация переменных: maxLen для хранения максимальной длины подстроки с затратами, не превышающими maxCost. start для хранения начального индекса текущей подстроки. currCost
PHP | LeetCode
19 Aug, 16:10
Задача: 911. Online Election Сложность: mediumВам даны два целочисленных массива persons и times. На выборах i-й голос был отдан за person[i] в момент времени times[i]. Для каждого запроса в момент времени t найдите человека, который лидировал на выборах в момент времени t. Голоса, отданные в момент времени t, будут учитываться в нашем запросе. В случае равенства голосов побеждает тот, кто проголосовал последним (среди равных кандидатов). Реализация класса TopVotedCandidate: TopVotedCandidate(int[] persons, int[] times) Инициализирует объект с массивами persons и times. int q(int t) Возвращает номер человека, который лидировал на выборах в момент времени t в соответствии с указанными правилами.Пример: Input ["TopVotedCandidate", "q", "q", "q", "q", "q", "q"] [[[0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]], [3], [12], [25], [15], [24], [8]] Output [null, 0, 1, 1, 0, 0, 1]👨💻
PHP | LeetCode
19 Aug, 09:05
Задача: 532. K-diff Pairs in an Array Сложность: mediumДан массив целых чисел nums и целое число k. Верните количество уникальных пар с разницей k в массиве. Пара с разницей k — это пара целых чисел (nums[i], nums[j]), для которой выполняются следующие условия: 0 <= i, j < nums.length i != j |nums[i] - nums[j]| == k Обратите внимание, что |val| обозначает абсолютное значение val.Пример: Input: nums = [3,1,4,1,5], k = 2 Output: 2 Explanation: There are two 2-diff pairs in the array, (1, 3) and (3, 5). Although we have two 1s in the input, we should only return the number of unique pairs.👨💻 Алгоритм:1⃣Создайте частотный хэш-словарь для подсчета количества каждого уникального числа в массиве nums.
PHP | LeetCode
18 Aug, 09:05
Задача: 1011. Capacity To Ship Packages Within D Days Сложность: mediumНа конвейерной ленте находятся пакеты, которые должны быть отправлены из одного порта в другой в течение нескольких дней. i-й пакет на конвейерной ленте имеет массу weights[i]. Каждый день мы загружаем корабль пакетами на конвейерной ленте (в порядке, заданном весами). Мы не можем загрузить больше груза, чем максимальная грузоподъемность корабля. Верните наименьшую грузоподъемность корабля, при которой все посылки на конвейере будут отправлены в течение нескольких дней.Пример: Input: weights = [1,2,3,4,5,6,7,8,9,10], days = 5 Output: 15👨💻 Алгоритм:1⃣Определение диапазона возможных ответов: Минимальная грузоподъемность должна быть не меньше максимального веса одного пакета (чтобы хотя бы один пакет можно было загрузить). Максимальная грузоподъемность - это сумма всех весов (если все пакеты будут отправлены
PHP | LeetCode
17 Aug, 09:05
Задача: 303. Range Sum Query - Immutable Сложность: easyДан целочисленный массив nums. Обработайте несколько запросов следующего типа: Вычислите сумму элементов массива nums между индексами left и right включительно, где left <= right. Реализуйте класс NumArray: - NumArray(int[] nums) Инициализирует объект с целочисленным массивом nums. - int sumRange(int left, int right) Возвращает сумму элементов массива nums между индексами left и right включительно (т.е. nums[left] + nums[left + 1] + ... + nums[right]).Пример: Input ["NumArray", "sumRange", "sumRange", "sumRange"] [[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]] Output [null, 1, -1, -3]👨💻 Алгоритм:1⃣Инициализация: Создайте массив sum длиной на один элемент больше, чем массив nums, и заполните его накопленными суммами элементов массива nums.
PHP | LeetCode
16 Aug, 09:05
Задача: 718. Maximum Length of Repeated Subarray Сложность: mediumЕсли даны два целочисленных массива nums1 и nums2, верните максимальную длину подмассива, который встречается в обоих массивах.Пример: Input: nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7] Output: 3👨💻 Алгоритм:1⃣Создайте двумерный массив для хранения длин общих подмассивов.2⃣Используйте динамическое программирование для нахождения максимальной длины общего подмассива.3⃣Итеративно обновляйте массив, сравнивая элементы обоих массивов и обновляя максимальную длину подмассива.😎 Решение: function findLength($nums1, $nums2) { $dp = array_fill(0, count($nums1) + 1, array_fill(0, count($nums2) + 1, 0));
PHP | LeetCode
15 Aug, 20:20
Задача: 898. Bitwise ORs of Subarrays Сложность: mediumЕсли задан целочисленный массив arr, верните количество различных побитовых ИЛИ всех непустых подмассивов arr. Побитовое ИЛИ подмассива - это побитовое ИЛИ каждого целого числа в подмассиве. Побитовым ИЛИ подмассива одного целого числа является это целое число. Подмассив - это непрерывная непустая последовательность элементов в массиве.Пример: Input: arr = [0] Output: 1👨💻 Алгоритм:1⃣Создать множество для хранения уникальных результатов побитового ИЛИ.2⃣Для каждого элемента массива, вычислить побитовое ИЛИ всех подмассивов, начинающихся с этого элемента. Добавить результат каждого вычисления в множество.3⃣Вернуть размер множества.😎 Решение: function subarrayBitwiseORs($arr) {
PHP | LeetCode
14 Aug, 09:05
Задача: 930. Binary Subarrays With Sum Сложность: mediumЕсли задан двоичный массив nums и целочисленная цель, верните количество непустых подмассивов с целью sum. Подмассив - это смежная часть массива.Пример: Input: nums = [1,0,1,0,1], goal = 2 Output: 4👨💻 Алгоритм:1⃣Использовать словарь для хранения количества встреченных сумм префиксов. Инициализировать текущую сумму и счетчик подмассивов с нулевыми значениями.2⃣Пройти по массиву и обновить текущую сумму. Если текущая сумма минус цель уже в словаре, добавить количество таких префиксов к счетчику подмассивов. Обновить словарь префиксных сумм.3⃣Вернуть счетчик подмассивов.
Related Channels
Other channels in the same section of the catalogue.
