LeetCode Community
9.76K subscribers
802 photos
5 videos
1.1K links
Сообщество пользователей-фанатов LeetCode. 🦾

Ссылка для друга: https://t.me/+fhGikrkptrpkYmIy

По всем вопросам: @mascarov_valentin или @adv_and_pr

НЕ являемся официальным каналом leetcode.com.

№4974320675
Download Telegram
Максимальное число из 6 и 9

Сложность: Лёгкая

Условие задачи: дается число, полностью состоящее из 6 и 9. Необходимо вычислить наибольшее число в данной раскладке, при этом имея возможность заменить не более одной шестерки на девятку.

Пример:

Ввод:
num = 9669
Вывод: 9969

Ввод: num = 9996
Вывод: 9999

Решение задачи
👍4👎4
Очередь через стак

Сложность: Лёгкая

Условие задачи: необходимо реализовать очередь, используя лишь два стака. Созданная очередь, должна поддерживать все операции, что и обычная (push, peek, pop, empty).

- void push(int x): добавление в конец очереди.
- int pop() удаление верхнего элемента из очереди и возврат его значения.
- int peek() возврат верхнего значения.
- boolean empty() проверка на наличие элементов в очереди.

Пример:

Ввод:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[ ], [1], [2], [], [ ], [ ] ]
Вывод: [null, null, null, 1, 1, false]
Объяснение:

MyQueue myQueue = new MyQueue();
myQueue.push(1); // очередь: [1]
myQueue.push(2); // очередь: [1, 2]
myQueue.peek(); // return 1
myQueue.pop(); // return 1, очередь [2]
myQueue.empty(); // return false

Решение задачи
1
Максимальная разница между узлом и предком

Сложность: Средняя

Условие задачи: дается бинарное дерево, необходимо вычислить максимальное значение разницы между двумя узлами, при этом должно соблюдаться строгое условие на узлы: один должен быть потомком, а другой быть его прямым родителем.

Пример:

Ввод:
root = [8,3,10,1,6,null,14,null,null,4,7,13]
Вывод:
7
Объяснение:
некоторые из комбинаций пар потомок-родитель:
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3


Ввод:
root = [1,null,2,null,0,3]
Вывод:
3

Решение задачи
👍1
Конструирование прямоугольника

Сложность: Лёгкая

Условие задачи: web-разработчикам необходимо знать размеры окна создаваемого приложения. Дается специальная прямоугольная рамка, имеющая размеры L (длина) и W (ширина). На данные габариты накладываются определенные условия:

- площадь прямоугольника, разрабатываемого нами окна, должна быть меньше или равна целевому значению;
- ширина должна быть не больше длины;
- разница между длинной и шириной должна быть минимальной.

Необходимо вычислить пару длины и ширины, удовлетворяющих вышеуказанным условиям.

Пример:

Ввод:
area = 4
Вывод: [2,2]
Объяснение:

Ввод:
area = 122122
Вывод: [427,286]

Решение задачи
👍3
Зигзагообразная обработка текста

Сложность: Средняя

Условие задачи: строка "PAYPALISHIRING" при разбиении на чтение зигзагом имеет следующий вид.
P A H N
A P L S I I G
Y I R

Необходимо, используя данный шаблон и количество рядов для зигзага, преобразовать входную строку к данному выводу. То есть после трансформации получится строка "PAHNAPLSIIGYIR".

Пример:

Ввод:
s = "PAYPALISHIRING", numRows = 3
Вывод: "PAHNAPLSIIGYIR"

Ввод: s = "PAYPALISHIRING", numRows = 4
Вывод:
Объяснение:
P
I N
A L S I G
Y A H R
P I

Решение задачи
👎3👍1
Нахождение вершины списка

Сложность: Средняя

Условие задачи: вершина списка - элемент, который больше как соседа слева, так и соседа справа.

Дается целочисленный массив (проиндексированный с 0), необходимо вычислить элемент, который является вершиной списка, а после вернуть его индекс. В случае нескольких таких элементов можно вернуть любой из вариантов.

Алгоритм должен иметь временную сложность O (log n).

Пример:

Ввод:
nums = [1,2,3,1]
Вывод: 2

Ввод:
nums = [1,2,1,3,5,6,4]
Вывод: 5

Решение задачи
Монотонное увеличение

Сложность: Средняя

Условие задачи: бинарная строка монотонно увеличивается, если она состоит из некоторого числа 0 (возможно, ни одного), за которым следует некоторое количество 1 (также возможно, ни одного).

Дана двоичная строка s. Вы можете перевернуть [i], изменив его с 0 на 1 или с 1 на 0.

Верните минимальное количество переворотов, чтобы сделать s монотонно увеличивающимся.

Пример:

Ввод:
s = "00110"
Вывод: 1
Объяснение: 00111

Ввод: s = "010110"
Вывод: 2

Решение задачи
👍5
Количество узлов

Сложность: Средняя

Условие задачи: дано дерево (т.е. связный неориентированный граф, не имеющий циклов), состоящее из n узлов с числом от 0 до n - 1 и ровно n - 1 ребер. Корнем дерева является узел 0, и каждый узел дерева имеет метку, которая представляет собой символ нижнего регистра, указанный в строковых метках (т.е. узел с номером i имеет метку labels[i]).

Массив ребер задан на ребрах фермы[i] = [ai, bi], что означает наличие ребра между узлами ai и bi в дереве.

Возвращает массив размера n, где и[i] - количество узлов в поддереве узла земли, которые имеют ту же метку, что и узел i.

Поддерево дерева - это дерево, состоящее из узла в T и всех его дочерних узлов.

Пример:

Ввод:
n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd"
Вывод: [2,1,1,1,1,1,1]
Объяснение:

Ввод:
n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb"
Вывод: [4,2,1,1]

Решение задачи
👍1🎄1
Наименьшая лексикографически схожая строка

Сложность: Средняя

Условие задачи: даны две строки одинаковой длины s1 и s2 и строка baseStr.

Говорим, что s1[i] и s2[i] являются эквивалентными символами.

Например, если s1 = "abc" и s2 = "cde", то мы имеем 'a' == 'c', 'b' == 'd' и 'c' == 'e'.
Эквивалентные символы следуют обычным правилам отношения эквивалентности:

Рефлексивность: 'a' == 'a'.
Симметрия: 'a' == 'b' подразумевает 'b' == 'a'.
Транзитивность: 'a' == 'b' и 'b' == 'c' подразумевает 'a' == 'c'.
Например, учитывая информацию об эквивалентности из s1 = "abc" и s2 = "cde", "cd" и "ab" являются эквивалентными строками базового Str = "eed", а "aab" является лексикографически наименьшей эквивалентной строкой базового str.

Верните лексикографически наименьшую эквивалентную строку базового Str, используя информацию об эквивалентности из s1 и s2.

Пример:

Ввод:
s1 = "parker", s2 = "morris", baseStr = "parser"
Вывод: "makkek"

Ввод: s1 = "hello", s2 = "world", baseStr = "hold"
Вывод: "hdld"

Решение задачи
👍3
Количество провинций

Сложность: Средняя

Условие задачи: даётся n провинций, какие-то из них соединены между собой, какие-то нет, также соблюдается правило транзитивности: если провинция «1» соединена с провинцией «2», а «2» соединена с «3» провинцией, то и «1» соединена с «3».

Провинцией является совокупность городов, объединённых между собой, но при этом отделенные от других, принадлежащих другим провинциям.

На вход даётся квадратичная матрица, в которой isConnected[i][j] = 1 - соединение между i - ым и j - - ым населенными пунктами (1 - имеется соединение, 0 - отсутствует).

Необходимо вычислить количество провинций.

Пример:

Ввод:
isConnected = [[1,1,0],[1,1,0],[0,0,1]]
Вывод: 2
Объяснение: *во вложении

Решение задачи
👍2
K-ый наибольший элемент в массиве

Сложность: Средняя

Условие задачи: дается массив, а также число k. Необходимо вернуть k-ый наибольший элемент в массиве.

Данный элемент отсчитывается в отсортированном списке, а не по уникальности значений.

Решение должно иметь временную сложность не более O(n).

Пример:

Ввод:
nums = [3,2,1,5,6,4], k = 2
Вывод:
5

Ввод:
nums = [3,2,3,1,2,4,5,5,6], k = 4
Вывод:
4

Решение задачи
👍5
Проверка соответствия строк в двух списках

Сложность: Лёгкая

Условие задачи: на вход подаются два строковых массива, необходимо вернуть true, если два массива представляют одну и ту же строку, false в противном случае.

Под представлением одной и той же строки подразумевается, что после конкатенации всех фрагментов списков, две полученные строки будут идентичными.

Пример:

Ввод:
word1 = ["ab", "c"], word2 = ["a", "bc"]
Вывод: true

Объяснение:
word1: "ab" + "c" -> "abc"
word2: "a" + "bc" -> "abc"

Ввод: word1 = ["a", "cb"], word2 = ["ab", "c"]
Вывод: false

Решение задачи
1👍1🎄1
K-ый наибольший элемент

Сложность: Лёгкая

Условие задачи: необходимо разработать класс по нахождению k-ого наибольшего элемента среди передаваемых значений. k-м считается элемент для отсортированного списка, а не по уникальности значения.

Класс содержит следующие методы:

- KthLargest(int k, int[] nums) иниициализирует класс;
- int add(int val) добавляет элемент в спискок и возвращает k-ый наименьший согласно условию.

Пример:

Ввод:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]

Вывод:
[null, 4, 5, 5, 8, 8]
Объяснение:

KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8


Решение задачи
👍2🔥1
Сумма тропы в дереве II

Сложность: Средняя

Условие задачи: дается корень бинарного дерева, а также целовое значение суммы, необходимо вернуть такие пути в дереве (от корня до последнего потомка), сумма значений в узлах которых равна целевой сумме. Каждый путь должен быть возвращен как список из значений узлов.

Пример:

Ввод:
root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Вывод:
[[5,4,11,2],[5,8,4,5]]
Объяснение:
* голубые узлы на изображении


Решение задачи
1
Подмножества

Сложность: Средняя

Условие задачи: дан массив из целых чисел, необходимо вывести все подмножества исходного массива, которые не содержат дубликаты.

Пример:

Ввод:
nums = [1,2,3]
Вывод:
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

Ввод:
nums = [0]
Вывод:
[[],[0]]

Решение задачи
👍2🔥1
Максимальное скользящее

Сложность: Тяжёлая

Условие задачи: дан целочисленный массив, а также размер k подмассива, начинающегося от левой границы, и заканчивающегося в процессе выполнения алгоритма у правой границы. На каждом шаге можно просматривать k последовательных элементов скользящего массива. На каждом шаге надо определить максимальное значение скользящего.

Пример:

Ввод:
nums = [1,3,-1,-3,5,3,6,7], k = 3
Вывод:
[3,3,5,5,6,7]

Объяснение:
Скользящее на каждой итерации Max
-------------------------- -----
[1 3 -1] -3 5 3 6 7
3
1 [3 -1 -3] 5 3 6 7
3
1 3 [-1 -3 5] 3 6 7
5
1 3 -1 [-3 5 3] 6 7
5
1 3 -1 -3 [5 3 6] 7
6
1 3 -1 -3 5 [3 6 7]
7

Ввод:
nums = [1], k = 1
Вывод:
[1]

Решение задачи
👍4
Столбцы таблицы Excel

Сложность: Лёгкая

Условие задачи: на вход подается номер столбца, необходимо конвертировать его в буквенное представление, которое будет использоваться в таблице-Excel.

Пример:

Ввод:
columnNumber = 1
Вывод:
"A"

Ввод: columnNumber = 28
Вывод:
"AB"

Решение задачи
👍2
Городской судья

Сложность: Лёгкая

Условие задачи: в городе живёт n людей, проиндексированные с 1 до n. Пошел слух, что один из горожан является судьей.

Если в городе-таки имеется судья, то:

1. Судья никому не доверяет.
2. Каждый горожанин, за исключением судьи, доверяет судье.
3. Существует один и единственный человек, который удовлетворяет правилам 1 и 2.

На вход подается массив связей доверия между гражданами, где trust[i] = [ai, bi] обозначает, что ai доверяет жителю bi.

Вывести надо индекс судьи или же -1 в случае отсутствия такового среди жителей города.

Пример:

Ввод:
n = 2, trust = [[1,2]]
Вывод:
2

Ввод:
n = 3, trust = [[1,3],[2,3],[3,1]]
Вывод: -1

Решение задачи
👍1
Сумма по пути III

Сложность: Средняя

Условие задачи: дан указатель на корень бинарного дерева и целое число - значение таргета. Надо посчитать количество путей в дереве, сумма значений в узлах которых равна целевому значению.

Путь может начинаться с любого из узлов дерева, но при этом путь должен сожержать лишь узлы-родственники.

Пример:

Ввод:
root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Вывод:
3
Объяснение:
*во вложении

Ввод:
root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Вывод:
3

Решение задачи
👍4
Сравнение стёртых строк

Сложность: Лёгкая

Условие задачи: даны две строки, необходимо выяснить являются они идентичными после удаления символов путем использования клавиши backspace (символ #).

Если строка пустая, то backspace оставляет её пустой.

Пример:

Ввод:
s = "ab#c", t = "ad#c"
Вывод:
true
Объяснение:
обе строки после использования удаления символов образуют сроку "ac"

Ввод:
s = "ab##", t = "c#d#"
Вывод:
true

Ввод: s = "a#c", t = "b"
Вывод: false

Решение задачи
👍2🤔2🎄1