Алгоритмы на JavaScript
Решай задачи в браузере. У каждой есть тесты, разбор и оценка сложности.
Решено 0 из 20
Два числа с заданной суммой
Верните индексы двух разных элементов nums, сумма которых равна target. Просматривайте правый индекс слева направо; верните первую найденную пару [левый, правый], выбирая самый ранний левый индекс. Если пары нет, верните []. Исходный массив не изменяйте.
Правильная скобочная последовательность
Проверьте, корректно ли вложены и закрыты круглые, квадратные и фигурные скобки. Строка содержит только эти шесть символов. Пустая строка считается корректной.
Первое вхождение бинарным поиском
В отсортированном по возрастанию массиве найдите индекс первого вхождения target. Значения могут повторяться. Верните −1, если числа нет.
Подстрока без повторяющихся символов
Верните длину самой длинной непрерывной подстроки без повторяющихся символов. Символом считается Unicode code point: emoji из одного code point занимает одну позицию; составные графемы отдельно не объединяются.
Группировка анаграмм
Сгруппируйте слова, составленные из одинаковых букв с одинаковыми частотами. Порядок групп определяется первым появлением группы; порядок слов внутри группы сохраните. Регистр отсутствует: используются только строчные латинские буквы.
Объединение пересекающихся интервалов
Даны закрытые интервалы [start, end]. Объедините пересекающиеся и соприкасающиеся интервалы, верните результат по возрастанию начала. Входные массивы не изменяйте.
Разворачивание вложенного массива
Разверните вложенные массивы чисел в один плоский массив, сохранив порядок слева направо. Вложенность произвольная, пустые массивы разрешены. Не используйте flat и не изменяйте вход.
Нули в конец без изменения входа
Верните новый массив с теми же числами: все ненулевые элементы в исходном порядке, затем все нули. Исходный массив не изменяйте. Значение −0 считается нулём.
Произведение всех элементов кроме текущего
Для каждой позиции вычислите произведение всех остальных элементов. Не используйте деление. В массиве возможны нули и отрицательные числа; для одного элемента результат равен [1].
Количество подмассивов с заданной суммой
Посчитайте непустые непрерывные подмассивы, сумма элементов которых равна k. Числа могут быть отрицательными, поэтому обычное окно с монотонным уменьшением суммы не подходит.
Максимальная сумма окна длины k
Найдите максимальную сумму ровно k последовательных элементов. Значения могут быть отрицательными. Вход не изменяйте.
Минимальное окно со всеми символами
Найдите кратчайшую подстроку s, содержащую все символы t с учётом повторов. При равной длине верните самое левое окно. Если решения нет или t пустая, верните пустую строку.
Дни до более тёплой погоды
Для каждого дня верните число дней до ближайшей строго более высокой температуры. Если такого дня нет, запишите 0. Одинаковая температура не считается потеплением.
Обход двоичного дерева по уровням
Верните значения узлов по уровням слева направо. Дерево задано JSON: узел имеет value, left и right; отсутствующий ребёнок равен null. Пустое дерево возвращает [].
Кратчайший путь в сетке
Найдите минимальное число шагов из левой верхней клетки в правую нижнюю. 0 — проход, 1 — стена; двигаться можно вверх, вниз, влево и вправо. Верните −1, если пути нет. Входную сетку не изменяйте.
Минимум семестров с зависимостями
Есть n курсов с номерами 0…n−1. Пара [a,b] означает: курс a нужно закончить до b. За семестр можно пройти любое число доступных курсов, каждый занимает один семестр. Верните минимум семестров для всех курсов или −1 при цикле. Для n = 0 ответ 0.
Чистая симуляция LRU-кеша
Обработайте операции над LRU-кешем ёмкости capacity. ["put", key, value] записывает значение и делает ключ самым свежим. ["get", key] возвращает значение или −1 и обновляет свежесть найденного ключа. Верните массив ответов только для get. При переполнении удаляется давно не использованный ключ.
Расстояние Левенштейна
Найдите минимальное число вставок, удалений и замен одного символа, превращающих a в b. Каждая операция стоит 1. Используются только строчные латинские буквы.
Минимальное число монет
Из монет заданных номиналов наберите amount минимальным числом монет. Каждый номинал можно использовать сколько угодно раз. Если сумму набрать нельзя, верните −1; для суммы 0 верните 0.
Длина строго возрастающей подпоследовательности
Найдите длину самой длинной строго возрастающей подпоследовательности. Элементы не обязаны идти подряд, но их исходный порядок сохраняется. Одинаковые значения не увеличивают длину.