Первая плохая версия
Сложность: Лёгкая
Условие задачи: производится разработка нового программного продукта, и на последней проверке было выявлено, что версия ПО не прошла проверку качества. Каждая следующая версия зависит от предыдущей, то есть если текущая версия не проходит проверки, то все последующие также не годны для какого-либо обслуживания.
Предоставляется n - версий, нумерованных с единицы, необходимо найти первую неисправную версию ПО.
Также дается интерфейс
Пример:
Ввод:
Вывод:
Объяснение:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: производится разработка нового программного продукта, и на последней проверке было выявлено, что версия ПО не прошла проверку качества. Каждая следующая версия зависит от предыдущей, то есть если текущая версия не проходит проверки, то все последующие также не годны для какого-либо обслуживания.
Предоставляется n - версий, нумерованных с единицы, необходимо найти первую неисправную версию ПО.
Также дается интерфейс
bool isBadVersion(version), который производит проверку на то, является ли проверяемая версия неисправной. Решить задачу необходимо за минимальное количество вызовов чекера. Пример:
Ввод:
n = 5, bad = 4Вывод:
4Объяснение:
call isBadVersion(3) -> false
call isBadVersion(5) -> true
call isBadVersion(4) -> true
4 - первая испорченная версия.Ввод:
Вывод:
Решение задачи
👍6
Мутация генов
Сложность: Средняя
Условие задачи: подается 8-символьная строка, состоящая из символов:
Необходимо осуществить расследование мутации от начального гена до конечного.
Пример одной мутации:
Помимо этого есть хранилицще генов, в котором хранятся всевозможные вариации мутаций, которые могут происходить.
Задача следующая, дается начальный и конечный гены, а также банк мутаций, необходимо вычислить наименьшее количество мутации, чтобы прийти к конечному результату. Если не существует таких преобразований для получения требуемого результата, надо вернуть -1.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Средняя
Условие задачи: подается 8-символьная строка, состоящая из символов:
'A', 'C', 'G', и 'T'. Необходимо осуществить расследование мутации от начального гена до конечного.
Пример одной мутации:
"AACCGGTT" --> "AACCGGTA". Помимо этого есть хранилицще генов, в котором хранятся всевозможные вариации мутаций, которые могут происходить.
Задача следующая, дается начальный и конечный гены, а также банк мутаций, необходимо вычислить наименьшее количество мутации, чтобы прийти к конечному результату. Если не существует таких преобразований для получения требуемого результата, надо вернуть -1.
Пример:
Ввод:
start = "AACCGGTT", end = "AACCGGTA", bank = ["AACCGGTA"]Вывод:
1Ввод:
start = "AACCGGTT", end = "AAACGGTA", bank = ["AACCGGTA","AACCGCTA","AAACGGTA"]Вывод:
2Решение задачи
👍3
Монетообменик
Сложность: Средняя
Условие задачи: дается массив, состоящий измонет определенного номинала, а также целевое значение суммы.
Необходимо высчитать наименьшее количество монет, которыми можно получить необходимую сумму или вернуть -1 в случае невозможности.
Количество монет не ограничено.
Пример:
Ввод:
Вывод:
Объяснение:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Средняя
Условие задачи: дается массив, состоящий измонет определенного номинала, а также целевое значение суммы.
Необходимо высчитать наименьшее количество монет, которыми можно получить необходимую сумму или вернуть -1 в случае невозможности.
Количество монет не ограничено.
Пример:
Ввод:
coins = [1,2,5], amount = 11Вывод:
3Объяснение:
11 = 5 + 5 + 1Ввод:
coins = [2], amount = 3Вывод:
-1Ввод:
coins = [1], amount = 0Вывод:
0Решение задачи
👍2
Записка о выкупе
Сложность: Лёгкая
Условие задачи: дано две строки:
Одна буква из
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: дано две строки:
ransomNote и magazine. Требуется осуществить проверку, может ли строка ransomNote быть получена путем использования букв из строки magazine. Одна буква из
magazine может быть исопльзована единажды в ransomNote.Пример:
Ввод:
ransomNote = "a", magazine = "b"Вывод:
falseВвод:
ransomNote = "aa", magazine = "ab"Вывод:
falseВвод:
ransomNote = "aa", magazine = "aab"Вывод:
trueРешение задачи
👍4
Поддерево дерева
Сложность: Лёгкая
Условие задачи: даны корни бинарных деревьев
Пример:
Ввод:
Вывод:
Объяснение: *на картинке к задаче
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: даны корни бинарных деревьев
root и subRoot. Надо осуществить проверку, является ли subRoot поддеревом root с той же самой структурой и значениями в узлах.Пример:
Ввод:
root = [3,4,5,1,2], subRoot = [4,1,2]Вывод:
trueОбъяснение: *на картинке к задаче
Ввод:
root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]Вывод:
falseРешение задачи
👍4
Грабители 2
Сложность: Средняя
Условие задачи: дан массив денег, находящихся в каждом из домов. Все дома, находящиеся в массиве, расположены кольцом, первый является соседом с последним.
Нашей задачей является ограбить на как можно более внушительную сумму, но есть одно но: нельзя красть в соседних домах, иначе произойдет включение сигнализации.
Результатом вычислений должно являться число, показывающее максимальную выгоду от кражи.
Пример:
Ввод: nums = [2,3,2]
Вывод: 3
Объяснение: нельзя грабить первый и третий дома, так как они соседние.
Ввод: nums = [1,2,3,1]
Вывод: 4
Решение задачи
Сложность: Средняя
Условие задачи: дан массив денег, находящихся в каждом из домов. Все дома, находящиеся в массиве, расположены кольцом, первый является соседом с последним.
Нашей задачей является ограбить на как можно более внушительную сумму, но есть одно но: нельзя красть в соседних домах, иначе произойдет включение сигнализации.
Результатом вычислений должно являться число, показывающее максимальную выгоду от кражи.
Пример:
Ввод: nums = [2,3,2]
Вывод: 3
Объяснение: нельзя грабить первый и третий дома, так как они соседние.
Ввод: nums = [1,2,3,1]
Вывод: 4
Решение задачи
👍2
Палиндром наибольшей длины в подстроке
Сложность: Средняя
Условие задачи: дана строка, необходимо найти в ней палиндром наибольшей длины.
Палиндром - строка, которая одинаково читается как справа-налево, так и слева-направо.
Пример:
Ввод: s = "babad"
Вывод: "bab"
Объяснение: "aba" также является ответом
Ввод: s = "cbbd"
Вывод: "bb"
Решение задачи
Сложность: Средняя
Условие задачи: дана строка, необходимо найти в ней палиндром наибольшей длины.
Палиндром - строка, которая одинаково читается как справа-налево, так и слева-направо.
Пример:
Ввод: s = "babad"
Вывод: "bab"
Объяснение: "aba" также является ответом
Ввод: s = "cbbd"
Вывод: "bb"
Решение задачи
👍4
Арифметическая прогрессия в массиве
Сложность: Средняя
Условие задачи: дан массив, который называется массивом арифметической прогрессии в случае, если содержит как минимум три элемента, а разница между соседними элементами одинаковая.
Массивы [1,3,5,7,9], [7,7,7,7], [3,-1,-5,-9] являются таковыми.
Необходимо посчитать сколько подобных подмассивов находится в исходном.
Подмассив - непрерывная последовательность исходного массива.
Пример:
Ввод: nums = [1,2,3,4]
Вывод: 3
Объяснение: [1, 2, 3], [2, 3, 4] и [1,2,3,4] являются арифметическими подмассивами.
Ввод: nums = [1]
Вывод: 0
Решение задачи
Сложность: Средняя
Условие задачи: дан массив, который называется массивом арифметической прогрессии в случае, если содержит как минимум три элемента, а разница между соседними элементами одинаковая.
Массивы [1,3,5,7,9], [7,7,7,7], [3,-1,-5,-9] являются таковыми.
Необходимо посчитать сколько подобных подмассивов находится в исходном.
Подмассив - непрерывная последовательность исходного массива.
Пример:
Ввод: nums = [1,2,3,4]
Вывод: 3
Объяснение: [1, 2, 3], [2, 3, 4] и [1,2,3,4] являются арифметическими подмассивами.
Ввод: nums = [1]
Вывод: 0
Решение задачи
👍1
Расшифровка строки
Сложность: Средняя
Условие задачи: сообщение содержит символы из множества
На воход подается строка , состоящая из чисел, необходимо посчитать сколькими способами можно ее расшифровать.
Пример:
Ввод:
Вывод:
Объяснение:
Ввод:
Вывод:
Решение задачи
Сложность: Средняя
Условие задачи: сообщение содержит символы из множества
A-Z и может быть расшифровано следующим образом:'A' -> "1"
'B' -> "2"
...
'Z' -> "26"На воход подается строка , состоящая из чисел, необходимо посчитать сколькими способами можно ее расшифровать.
Пример:
Ввод:
s = "12"Вывод:
2Объяснение:
"12" можно расшифровать двумя путями: как (1 2) = "AB", а также как и (12) = "L".Ввод:
s = "226"Вывод:
3Решение задачи
👍2
Слияние двух бинарных деревьев
Сложность: Лёгкая
Условие задачи: дается два бинарных дерева, надо осуществить их наложение друг на друга и вывести результат в новом дереве.
Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: дается два бинарных дерева, надо осуществить их наложение друг на друга и вывести результат в новом дереве.
Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод:
root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]Вывод:
[3,4,5,5,4,null,7]Ввод:
root1 = [1], root2 = [1,2]Вывод:
[2,2]Решение задачи
👍8
Поиск суммы в бинарном дереве поиска
Сложность: Лёгкая
Условие задачи: дано бинарное дерево поиска, а также целевое значение. Необходимо определить, имеется ли в дереве два таких значения, в сумме дающие целевое значение, или же нет.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: дано бинарное дерево поиска, а также целевое значение. Необходимо определить, имеется ли в дереве два таких значения, в сумме дающие целевое значение, или же нет.
Пример:
Ввод:
root = [5,3,6,2,4,null,7], k = 9Вывод:
trueВвод:
root = [5,3,6,2,4,null,7], k = 28Вывод:
falseРешение задачи
👍7
Ключи и комнаты
Сложность: Средняя
Условие задачи: есть
При посещении какой-либо комнаты в ней находится определенная связка уникальных ключей, номер ключа означет номер комнаты, для которой он отпирает дверь. Можно использовать сразу все связку ключей.
На вход подается массив комнат, где в i-ячейке дается список ключей, находящихся в текущей комнате. Необходимо определеть, можно ли обойти все комнаты.
Пример:
Ввод:
Вывод:
Объяснение: из 0 комнаты можно попасть в 1, из 1 во 2, из 2 в 3.
Ввод:
Вывод:
Решение задачи
Сложность: Средняя
Условие задачи: есть
n комнат проиндексированных с 0, все они закрыты кроме комнаты с номером 0. Необходимо посетить все комнаты, однако этого нельзя сдеать не имея ключа от соответствующей закрытой двери. При посещении какой-либо комнаты в ней находится определенная связка уникальных ключей, номер ключа означет номер комнаты, для которой он отпирает дверь. Можно использовать сразу все связку ключей.
На вход подается массив комнат, где в i-ячейке дается список ключей, находящихся в текущей комнате. Необходимо определеть, можно ли обойти все комнаты.
Пример:
Ввод:
rooms = [[1],[2],[3],[]]Вывод:
trueОбъяснение: из 0 комнаты можно попасть в 1, из 1 во 2, из 2 в 3.
Ввод:
rooms = [[1,3],[3,0,1],[2],[0]]Вывод:
falseРешение задачи
👍4❤1
Поиск в бинарном дереве
Сложность: Лёгкая
Условие задачи: дано бинарное дерево поиска и целевое значения для поиска.
Необходимо найти в дереве такой элемент, равный целевому, а также вывести поддерево данного узла.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: дано бинарное дерево поиска и целевое значения для поиска.
Необходимо найти в дереве такой элемент, равный целевому, а также вывести поддерево данного узла.
Пример:
Ввод:
root = [4,2,7,1,3], val = 2Вывод:
[2,1,3]Ввод:
root = [4,2,7,1,3], val = 5Вывод:
[]Решение задачи
👍3
Количество возрастающих подпоследовательностей наибольшей длины
Сложность: Средняя
Условие задачи: дан массив целых чисел, надо посчитать количество возрастающих подпоследовательностей наибольшей длины. Подпоследовательность (ее элементы) должна строго возрастать.
Пример:
Ввод:
Вывод:
Объяснение: есть две возрастающие подпоследовательности одинаковой длины:
Ввод:
Вывод:
Объяснение: в данном массиве есть 5 подпоследовательностей длины 1.
Решение задачи
Сложность: Средняя
Условие задачи: дан массив целых чисел, надо посчитать количество возрастающих подпоследовательностей наибольшей длины. Подпоследовательность (ее элементы) должна строго возрастать.
Пример:
Ввод:
nums = [1,3,5,4,7]Вывод:
2Объяснение: есть две возрастающие подпоследовательности одинаковой длины:
[1, 3, 4, 7] и [1, 3, 5, 7]Ввод:
nums = [2,2,2,2,2]Вывод:
5Объяснение: в данном массиве есть 5 подпоследовательностей длины 1.
Решение задачи
👍5
Диаметр бинарного дерева
Сложность: Лёгкая
Условие задачи: дан корневой элемент бинарного дерева, необходимо расчитать диаметр бинарного дерева.
Диаметр бинарного дерева - наибольшая длина между двумя любыми узлами в дереве (необязательно включая корневой элемент всего дерева).
Длина между двумя узлами дерева - количество ребер между ними.
Пример:
Ввод: root = [1,2,3,4,5]
Вывод: 3
Объяснение: длина пути [4,2,1,3] или пути [5,2,1,3].
Ввод: root = [1,2]
Вывод: 1
Решение задачи
Сложность: Лёгкая
Условие задачи: дан корневой элемент бинарного дерева, необходимо расчитать диаметр бинарного дерева.
Диаметр бинарного дерева - наибольшая длина между двумя любыми узлами в дереве (необязательно включая корневой элемент всего дерева).
Длина между двумя узлами дерева - количество ребер между ними.
Пример:
Ввод: root = [1,2,3,4,5]
Вывод: 3
Объяснение: длина пути [4,2,1,3] или пути [5,2,1,3].
Ввод: root = [1,2]
Вывод: 1
Решение задачи
👍5🤔1
Сравнение стёртых строк
Сложность: Лёгкая
Условие задачи: даны две строки, необходимо выяснить являются они идентичными после удаления символов путем использования клавиши backspace (символ #).
Если строка пустая, то backspace оставляет её пустой.
Пример:
Ввод:
Вывод:
Объяснение: обе строки после использования удаления символов образуют сроку
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: даны две строки, необходимо выяснить являются они идентичными после удаления символов путем использования клавиши backspace (символ #).
Если строка пустая, то backspace оставляет её пустой.
Пример:
Ввод:
s = "ab#c", t = "ad#c"Вывод:
trueОбъяснение: обе строки после использования удаления символов образуют сроку
"ac"Ввод:
s = "ab##", t = "c#d#"Вывод:
trueВвод:
s = "a#c", t = "b"Вывод:
falseРешение задачи
👍3👎1
Тройная сумма
Сложность: Средняя
Условие задачи: дан целочисленный массив nums, вычислите все тройки
Решение не должно содержать дубликатов.
Пример:
Ввод:
Вывод:
Объяснение:
Но уникальные тройки -
Ввод:
Вывод:
Решение задачи
Сложность: Средняя
Условие задачи: дан целочисленный массив nums, вычислите все тройки
[nums[i], nums[j], nums[k]] такие что i != j, i != k, и j != k, и nums[i] + nums[j] + nums[k] == 0.Решение не должно содержать дубликатов.
Пример:
Ввод:
nums = [-1,0,1,2,-1,-4]Вывод:
[[-1,-1,2],[-1,0,1]]Объяснение:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0.
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0.
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0.Но уникальные тройки -
[-1,0,1] и [-1,-1,2].Ввод:
nums = [0,1,1]Вывод:
[]Решение задачи
👍2
Сумма по пути 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Решение задачи
👍8
Поиск в сдвинутом сортированном массиве
Сложность: Средняя
Условие задачи: дан массив, сдвинутый относительно опорного элемента, который неизвестен ( массив после сдвига относительно опорного элемента имеет следующий вид:
Массив
Необходимо осуществить поиск целевого элемента в сдвинутом массиве, определив его индекс, или же вывести
Решение должно быть за
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Средняя
Условие задачи: дан массив, сдвинутый относительно опорного элемента, который неизвестен ( массив после сдвига относительно опорного элемента имеет следующий вид:
[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]])Массив
[0,1,2,4,5,6,7], имея опорный элемент 3, будет выглядеть следующим образом: [4,5,6,7,0,1,2]. Необходимо осуществить поиск целевого элемента в сдвинутом массиве, определив его индекс, или же вывести
-1 при его отсутствии. Решение должно быть за
O(log n) по времени. Пример:
Ввод:
nums = [4,5,6,7,0,1,2], target = 0Вывод:
4Ввод:
nums = [4,5,6,7,0,1,2], target = 3Вывод:
-1Решение задачи
👍4
Балансировка бинарного дерева
Сложность: Лёгкая
Условие задачи: дается бинарное дерево, определите является ли дерево сбалансированным.
Для данной проблемы сбалансированным по высоте деревом является бинарное дерево, у которого для каждого родителя есть оба потомка, если потомки вообще имеются.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: дается бинарное дерево, определите является ли дерево сбалансированным.
Для данной проблемы сбалансированным по высоте деревом является бинарное дерево, у которого для каждого родителя есть оба потомка, если потомки вообще имеются.
Пример:
Ввод:
root = [3,9,20,null,null,15,7]Вывод:
trueВвод:
root = [1,2,2,3,3,null,null,4,4]Вывод:
trueРешение задачи
👍3
Городской судья
Сложность: Лёгкая
Условие задачи: в городе живёт n людей, проиндексированные с 1 до n. Пошел слух, что один из горожан является судьей.
Если в городе-таки имеется судья, то:
1. Судья никому не доверяет.
2. Каждый горожанин, за исключением судьи, доверяет судье.
3. Существует один и единственный человек, который удовлетворяет правилам 1 и 2.
На вход подается массив связей доверия между гражданами, где
Вывести надо индекс судьи или же -1 в случае отсутствия такового среди жителей города.
Пример:
Ввод:
Вывод:
Ввод:
Вывод:
Решение задачи
Сложность: Лёгкая
Условие задачи: в городе живёт 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Решение задачи
👍11