Maximum Profit in Job Scheduling

Определить порядок выполнения задач с максимальным профитом. Задача на динамическое программирование.

Concatenating Subarrays

Даны двумерный и обычный массивы чисел. Можно ли все отдельные массивы из двумерного найти в обычном массиве, так, чтобы не было пересечений? Хорошая задача на рекурсию.

Linked List Cycle

Разберем алгоритм с двумя указателями, который позволяет найти цикл без дополнительной памяти.

Peak Index in a Mountain Array

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

Combination Sum

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

Letter Tile Possibilities

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

Jump Game VI

Задача из серии Jump Game, на динамическое программирование и очереди одновременно. Разберём сначала классическую ошибку — решение через жадный алгоритм, посмотрим почему это не работает, и напишем рабочее решение через дпшечку. Далее оптимизируем с квадрата до линии с помощью очередей.

Word Ladder

Даны два слова, начальное и конечное, а также словарь различных слов. Вернуть длину кратчайшего пути между начальным и конечным словом, если разрешён переход между словами с разницей в один символ. Эта задача, по-моему, классический пример на графы. Слова — вершины, а описанный переход — рёбра.

Sliding Window Maximum

Найти максимумы в скользящем окне. Перейдём от брутфорса к решению с очередью. Вариация этой задачи попалась мне на онсайте в Facebook.

Minimum Number of Removals to Make Mountain Array

Какое минимальное количество элементов нужно удалить из массива, чтобы сделать его Mountain Array? Задача, которая строится на Longest Increasing Subsequence — классическая задача на динамическое программирование.